List of usage examples for org.apache.lucene.search IndexSearcher setSimilarity
public void setSimilarity(Similarity similarity)
From source file:cn.jcenterhome.web.action.CpAction.java
private List<String> getKeyWord(String text) throws IOException { List<String> keywords = new ArrayList<String>(); if (!Common.empty(text)) { Map<String, Integer> words = new HashMap<String, Integer>(); Analyzer analyzer = new IKAnalyzer(true); StringReader reader = new StringReader(text); TokenStream tokenStream = analyzer.tokenStream("*", reader); TermAttribute termAtt = (TermAttribute) tokenStream.getAttribute(TermAttribute.class); while (tokenStream.incrementToken()) { String word = termAtt.term(); if (word.length() > 1 && Common.strlen(word) > 2) { Integer count = words.get(word); if (count == null) { count = 0;/*from ww w . j a va 2 s. c o m*/ } words.put(word, count + 1); } } if (words.size() > 0) { Directory dir = null; IndexSearcher searcher = null; try { String fieldName = "text"; dir = new RAMDirectory(); IndexWriter writer = new IndexWriter(dir, analyzer, true, IndexWriter.MaxFieldLength.LIMITED); Document doc = new Document(); doc.add(new Field(fieldName, text, Field.Store.YES, Field.Index.ANALYZED)); writer.addDocument(doc); writer.close(); searcher = new IndexSearcher(dir); searcher.setSimilarity(new IKSimilarity()); Set<String> keys = words.keySet(); Map<String, Float> temps = new HashMap<String, Float>(); for (String key : keys) { int count = words.get(key); Query query = IKQueryParser.parse(fieldName, key); TopDocs topDocs = searcher.search(query, 1); if (topDocs.totalHits > 0) { temps.put(key, topDocs.getMaxScore() * count); } } Entry<String, Float>[] keywordEntry = getSortedHashtableByValue(temps); for (Entry<String, Float> entry : keywordEntry) { if (keywords.size() < 5) { keywords.add(entry.getKey()); } } } catch (Exception e) { e.printStackTrace(); } finally { try { searcher.close(); } catch (IOException e) { e.printStackTrace(); } try { dir.close(); } catch (IOException e) { e.printStackTrace(); } } } } return keywords; }
From source file:com.gentics.cr.lucene.indexaccessor.DefaultIndexAccessor.java
License:Apache License
/** * Fetches a double checked Searcher that has been checked for the presence of a reopen file * Note that it may occure that a prioritized Searcher may be reopened twice. * @param indexLocation //w w w. j a v a 2 s .co m * @return * @throws IOException */ public IndexSearcher getPrioritizedSearcher() throws IOException { boolean reopened = this.numReopening > 0; IndexSearcher searcher = (IndexSearcher) getSearcher(); if (reopened) { //REOPEN SEARCHER AS IT WAS PRIORITIZED synchronized (DefaultIndexAccessor.this) { IndexReader reader = searcher.getIndexReader(); IndexSearcher oldSearcher = searcher; IndexReader newReader = reader.reopen(); if (newReader != reader) { searcher = new IndexSearcher(newReader); searcher.setSimilarity(oldSearcher.getSimilarity()); oldSearcher.getIndexReader().close(); for (Map.Entry<Similarity, IndexSearcher> e : cachedSearchers.entrySet()) { if (e.getValue() == oldSearcher) { cachedSearchers.put(e.getKey(), searcher); } } } } } return searcher; }
From source file:com.gentics.cr.lucene.indexaccessor.DefaultIndexAccessor.java
License:Apache License
public synchronized IndexSearcher getSearcher(Similarity similarity, IndexReader indexReader) throws IOException { checkClosed();//from w w w. ja v a2 s .com IndexSearcher searcher = cachedSearchers.get(similarity); if (searcher != null) { LOGGER.debug("returning cached searcher"); } else { LOGGER.debug("opening new searcher and caching it"); searcher = indexReader != null ? new IndexSearcher(indexReader) : new IndexSearcher(directory); searcher.setSimilarity(similarity); cachedSearchers.put(similarity, searcher); } searcherUseCount++; notifyAll(); return searcher; }
From source file:com.gentics.cr.lucene.indexaccessor.DefaultIndexAccessor.java
License:Apache License
/** * Reopens all of the Searchers in the Searcher cache. This method is invoked * in a synchronized context./*from w ww. jav a2s .c o m*/ */ private void reopenCachedSearchers() { LOGGER.debug( "reopening cached searchers (" + cachedSearchers.size() + "):" + Thread.currentThread().getId()); Set<Similarity> keys = cachedSearchers.keySet(); for (Similarity key : keys) { IndexSearcher searcher = cachedSearchers.get(key); try { IndexReader oldReader = searcher.getIndexReader(); IndexSearcher oldSearcher = searcher; IndexReader newReader = oldReader.reopen(); if (newReader != oldReader) { cachedSearchers.remove(key); searcher = new IndexSearcher(newReader); searcher.setSimilarity(oldSearcher.getSimilarity()); oldSearcher.getIndexReader().close(); cachedSearchers.put(key, searcher); } } catch (IOException e) { LOGGER.error("error reopening cached Searcher", e); } } }
From source file:com.gentics.cr.lucene.indexaccessor.DefaultMultiIndexAccessor.java
License:Apache License
public IndexSearcher getSearcher(final Similarity similarity, final IndexReader indexReader) throws IOException { IndexReader ir = indexReader;// w ww . ja v a 2 s . c o m if (ir == null) { IndexReader[] readers = new IndexReader[this.dirs.length]; IndexAccessorFactory factory = IndexAccessorFactory.getInstance(); int i = 0; for (Directory index : this.dirs) { IndexAccessor indexAccessor = factory.getAccessor(index); readers[i] = indexAccessor.getReader(false); multiReaderAccessors.put(readers[i], indexAccessor); i++; } ir = new MultiReader(readers, false); } IndexSearcher multiSearcher = new IndexSearcher(ir); multiSearcher.setSimilarity(similarity); return multiSearcher; }
From source file:com.github.alvanson.xltsearch.SearchTask.java
License:Apache License
@Override protected List<SearchResult> call() { DirectoryReader ireader = null;//from w w w.j ava2 s .c o m List<SearchResult> results = null; updateMessage("Searching..."); try { ireader = DirectoryReader.open(config.getDirectory()); IndexSearcher isearcher = new IndexSearcher(ireader); isearcher.setSimilarity(config.getSimilarity()); QueryParser parser = new QueryParser(config.getVersion(), config.contentField, config.getAnalyzer()); Query query = parser.parse(qstr); logger.debug("Query: {}", query); ScoreDoc[] hits = isearcher.search(query, limit).scoreDocs; // collect results results = new ArrayList<>(hits.length); for (ScoreDoc hit : hits) { Document document = isearcher.doc(hit.doc); File file = new File(root.getPath() + File.separator + document.get(config.pathField)); String title = document.get(config.titleField); if (title == null) { title = ""; } // report metadata in `details` StringBuilder sb = new StringBuilder(); for (IndexableField field : document.getFields()) { if (field.stringValue() != null) { sb.append(field.name() + ": " + field.stringValue() + '\n'); } } results.add(new SearchResult(file, title, hit.score, sb.toString())); } updateMessage(hits.length + " results"); } catch (IOException ex) { updateMessage("I/O exception"); logger.error("I/O exception while reading index", ex); } catch (ParseException ex) { updateMessage("Parse error"); logger.warn("Parse exception while parsing '{}'", qstr, ex); } // close ireader if (ireader != null) { try { ireader.close(); } catch (IOException ex) { logger.warn("I/O exception while closing index reader", ex); } } return results; }
From source file:com.github.le11.nls.lucene.UIMATypeBasedSimilarityTest.java
License:Apache License
@Test public void baseSimilarityTest() { try {/* w w w .j ava 2 s .c o m*/ IndexSearcher searcher = new IndexSearcher(dir, true); Similarity payloadSimilarity = new UIMATypeBasedSimilarity(); searcher.setSimilarity(payloadSimilarity); // BooleanQuery booleanQuery = new BooleanQuery(); // booleanQuery.add(new PayloadTermQuery(new Term("title", "London"), new MaxPayloadFunction()), BooleanClause.Occur.SHOULD); // booleanQuery.add(new PayloadTermQuery(new Term("title", "English"), new MaxPayloadFunction()), BooleanClause.Occur.SHOULD); // SpanQuery[] clauses = new SpanQuery[]{new PayloadTermQuery(new Term("title","London"),new MaxPayloadFunction()), // new PayloadTermQuery(new Term("title","English"),new MaxPayloadFunction())}; // int slop = 3; // boolean inOrder = true; // Query query = new PayloadNearQuery(clauses, slop, inOrder); Query directQuery = new TermQuery(new Term("title", "London")); TopDocs topDocs = searcher.search(directQuery, 10); System.out.println("Number of matching docs: " + topDocs.totalHits); ScoreDoc doc1 = topDocs.scoreDocs[0]; System.out.println("Doc: " + doc1.toString()); System.out.println("Explain: " + searcher.explain(directQuery, doc1.doc)); Query payloadQuery = new PayloadTermQuery(new Term("title", "London"), new MaxPayloadFunction()); topDocs = searcher.search(payloadQuery, 10); System.out.println("Number of matching docs: " + topDocs.totalHits); ScoreDoc doc2 = topDocs.scoreDocs[0]; System.out.println("Doc: " + doc2.toString()); System.out.println("Explain: " + searcher.explain(payloadQuery, doc2.doc)); assertTrue(doc1.score < doc2.score); } catch (Exception e) { e.printStackTrace(); fail(e.getLocalizedMessage()); } }
From source file:com.leavesfly.lia.extsearch.payloads.PayloadsTest.java
License:Apache License
public void testPayloadTermQuery() throws Throwable { addDoc("Hurricane warning", "Bulletin: A hurricane warning was issued at " + "6 AM for the outer great banks"); addDoc("Warning label maker", "The warning label maker is a delightful toy for " + "your precocious seven year old's warning needs"); addDoc("Tornado warning", "Bulletin: There is a tornado warning for " + "Worcester county until 6 PM today"); IndexReader r = writer.getReader();/* w w w.j av a2s. c om*/ writer.close(); IndexSearcher searcher = new IndexSearcher(r); searcher.setSimilarity(new BoostingSimilarity()); Term warning = new Term("contents", "warning"); Query query1 = new TermQuery(warning); System.out.println("\nTermQuery results:"); TopDocs hits = searcher.search(query1, 10); TestUtil.dumpHits(searcher, hits); assertEquals("Warning label maker", // #B searcher.doc(hits.scoreDocs[0].doc).get("title")); // #B Query query2 = new PayloadTermQuery(warning, new AveragePayloadFunction()); System.out.println("\nPayloadTermQuery results:"); hits = searcher.search(query2, 10); TestUtil.dumpHits(searcher, hits); assertEquals("Warning label maker", // #C searcher.doc(hits.scoreDocs[2].doc).get("title")); // #C r.close(); searcher.close(); }
From source file:com.leavesfly.lia.searching.ScoreTest.java
License:Apache License
public void testSimple() throws Exception { indexSingleFieldDocs(new Field[] { new Field("contents", "x", Field.Store.YES, Field.Index.ANALYZED) }); IndexSearcher searcher = new IndexSearcher(directory); searcher.setSimilarity(new SimpleSimilarity()); Query query = new TermQuery(new Term("contents", "x")); Explanation explanation = searcher.explain(query, 0); System.out.println(explanation); TopDocs matches = searcher.search(query, 10); assertEquals(1, matches.totalHits);/* w w w. j a va2s .c om*/ assertEquals(1F, matches.scoreDocs[0].score, 0.0); searcher.close(); }
From source file:com.liferay.portal.search.lucene.LuceneHelperImpl.java
License:Open Source License
public IndexSearcher getSearcher(long companyId, boolean readOnly) throws IOException { IndexAccessor indexAccessor = _getIndexAccessor(companyId); IndexSearcher indexSearcher = new IndexSearcher(indexAccessor.getLuceneDir(), readOnly); indexSearcher.setDefaultFieldSortScoring(true, true); indexSearcher.setSimilarity(new FieldWeightSimilarity()); return indexSearcher; }