Example usage for org.apache.lucene.search IndexSearcher setSimilarity

List of usage examples for org.apache.lucene.search IndexSearcher setSimilarity

Introduction

In this page you can find the example usage for org.apache.lucene.search IndexSearcher setSimilarity.

Prototype

public void setSimilarity(Similarity similarity) 

Source Link

Document

Expert: Set the Similarity implementation used by this IndexSearcher.

Usage

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;
}