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

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

Introduction

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

Prototype

public Similarity getSimilarity() 

Source Link

Document

Expert: Get the Similarity to use to compute scores.

Usage

From source file:org.elasticsearch.index.search.child.ChildrenQuery.java

License:Apache License

@Override
public Weight createWeight(IndexSearcher searcher) throws IOException {
    SearchContext searchContext = SearchContext.current();

    final Query childQuery;
    if (rewrittenChildQuery == null) {
        childQuery = rewrittenChildQuery = searcher.rewrite(originalChildQuery);
    } else {//w w w.java  2s  .  com
        assert rewriteIndexReader == searcher.getIndexReader();
        childQuery = rewrittenChildQuery;
    }
    IndexSearcher indexSearcher = new IndexSearcher(searcher.getIndexReader());
    indexSearcher.setSimilarity(searcher.getSimilarity());

    final BytesRefHash parentIds;
    final FloatArray scores;
    final IntArray occurrences;
    switch (scoreType) {
    case MAX:
        MaxCollector maxCollector = new MaxCollector(parentChildIndexFieldData, parentType, searchContext);
        indexSearcher.search(childQuery, maxCollector);
        parentIds = maxCollector.parentIds;
        scores = maxCollector.scores;
        occurrences = null;
        Releasables.release(maxCollector.parentIdsIndex);
        break;
    case SUM:
        SumCollector sumCollector = new SumCollector(parentChildIndexFieldData, parentType, searchContext);
        indexSearcher.search(childQuery, sumCollector);
        parentIds = sumCollector.parentIds;
        scores = sumCollector.scores;
        occurrences = null;
        Releasables.release(sumCollector.parentIdsIndex);
        break;
    case AVG:
        AvgCollector avgCollector = new AvgCollector(parentChildIndexFieldData, parentType, searchContext);
        indexSearcher.search(childQuery, avgCollector);
        parentIds = avgCollector.parentIds;
        scores = avgCollector.scores;
        occurrences = avgCollector.occurrences;
        Releasables.release(avgCollector.parentIdsIndex);
        break;
    default:
        throw new RuntimeException("Are we missing a score type here? -- " + scoreType);
    }

    int size = (int) parentIds.size();
    if (size == 0) {
        Releasables.release(parentIds, scores, occurrences);
        return Queries.newMatchNoDocsQuery().createWeight(searcher);
    }

    final Filter parentFilter;
    if (size == 1) {
        BytesRef id = parentIds.get(0, new BytesRef());
        if (nonNestedDocsFilter != null) {
            List<Filter> filters = Arrays.asList(
                    new TermFilter(new Term(UidFieldMapper.NAME, Uid.createUidAsBytes(parentType, id))),
                    nonNestedDocsFilter);
            parentFilter = new AndFilter(filters);
        } else {
            parentFilter = new TermFilter(new Term(UidFieldMapper.NAME, Uid.createUidAsBytes(parentType, id)));
        }
    } else if (size <= shortCircuitParentDocSet) {
        parentFilter = new ParentIdsFilter(parentType, nonNestedDocsFilter, parentIds);
    } else {
        parentFilter = new ApplyAcceptedDocsFilter(this.parentFilter);
    }
    ParentWeight parentWeight = new ParentWeight(rewrittenChildQuery.createWeight(searcher), parentFilter, size,
            parentIds, scores, occurrences);
    searchContext.addReleasable(parentWeight);
    return parentWeight;
}

From source file:org.elasticsearch.index.search.child.ParentConstantScoreQuery.java

License:Apache License

@Override
public Weight createWeight(IndexSearcher searcher) throws IOException {
    SearchContext searchContext = SearchContext.current();
    BytesRefHash parentIds = new BytesRefHash(512, searchContext.pageCacheRecycler());
    ParentIdsCollector collector = new ParentIdsCollector(parentType, parentChildIndexFieldData, parentIds);

    final Query parentQuery;
    if (rewrittenParentQuery != null) {
        parentQuery = rewrittenParentQuery;
    } else {/*from   w  ww.j  av a 2 s  .c  o  m*/
        assert rewriteIndexReader == searcher.getIndexReader();
        parentQuery = rewrittenParentQuery = originalParentQuery.rewrite(searcher.getIndexReader());
    }
    IndexSearcher indexSearcher = new IndexSearcher(searcher.getIndexReader());
    indexSearcher.setSimilarity(searcher.getSimilarity());
    indexSearcher.search(parentQuery, collector);

    if (parentIds.size() == 0) {
        return Queries.newMatchNoDocsQuery().createWeight(searcher);
    }

    ChildrenWeight childrenWeight = new ChildrenWeight(childrenFilter, parentIds);
    searchContext.addReleasable(childrenWeight);
    return childrenWeight;
}

From source file:org.elasticsearch.index.search.child.ParentQuery.java

License:Apache License

@Override
public Weight createWeight(IndexSearcher searcher) throws IOException {
    SearchContext searchContext = SearchContext.current();
    ParentIdAndScoreCollector collector = new ParentIdAndScoreCollector(searchContext,
            parentChildIndexFieldData, parentType);

    final Query parentQuery;
    if (rewrittenParentQuery == null) {
        parentQuery = rewrittenParentQuery = searcher.rewrite(originalParentQuery);
    } else {/*w  w  w .j  ava  2  s .c  o m*/
        assert rewriteIndexReader == searcher.getIndexReader();
        parentQuery = rewrittenParentQuery;
    }
    IndexSearcher indexSearcher = new IndexSearcher(searcher.getIndexReader());
    indexSearcher.setSimilarity(searcher.getSimilarity());
    indexSearcher.search(parentQuery, collector);
    FloatArray scores = collector.scores;
    BytesRefHash parentIds = collector.parentIds;

    if (parentIds.size() == 0) {
        Releasables.release(parentIds, scores);
        return Queries.newMatchNoDocsQuery().createWeight(searcher);
    }

    ChildWeight childWeight = new ChildWeight(searchContext, parentQuery.createWeight(searcher), childrenFilter,
            parentIds, scores);
    searchContext.addReleasable(childWeight);
    return childWeight;
}

From source file:org.elasticsearch.index.search.child.TopChildrenQuery.java

License:Apache License

@Override
public Weight createWeight(IndexSearcher searcher) throws IOException {
    Recycler.V<ObjectObjectOpenHashMap<Object, ParentDoc[]>> parentDocs = cacheRecycler.hashMap(-1);
    SearchContext searchContext = SearchContext.current();

    int parentHitsResolved;
    int requestedDocs = (searchContext.from() + searchContext.size());
    if (requestedDocs <= 0) {
        requestedDocs = 1;/*  w  ww. j  a v a 2 s. c  om*/
    }
    int numChildDocs = requestedDocs * factor;

    Query childQuery;
    if (rewrittenChildQuery == null) {
        childQuery = rewrittenChildQuery = searcher.rewrite(originalChildQuery);
    } else {
        assert rewriteIndexReader == searcher.getIndexReader();
        childQuery = rewrittenChildQuery;
    }

    IndexSearcher indexSearcher = new IndexSearcher(searcher.getIndexReader());
    indexSearcher.setSimilarity(searcher.getSimilarity());
    while (true) {
        parentDocs.v().clear();
        TopDocs topChildDocs = indexSearcher.search(childQuery, numChildDocs);
        try {
            parentHitsResolved = resolveParentDocuments(topChildDocs, searchContext, parentDocs);
        } catch (Exception e) {
            throw new IOException(e);
        }

        // check if we found enough docs, if so, break
        if (parentHitsResolved >= requestedDocs) {
            break;
        }
        // if we did not find enough docs, check if it make sense to search further
        if (topChildDocs.totalHits <= numChildDocs) {
            break;
        }
        // if not, update numDocs, and search again
        numChildDocs *= incrementalFactor;
        if (numChildDocs > topChildDocs.totalHits) {
            numChildDocs = topChildDocs.totalHits;
        }
    }

    ParentWeight parentWeight = new ParentWeight(rewrittenChildQuery.createWeight(searcher), parentDocs);
    searchContext.addReleasable(parentWeight);
    return parentWeight;
}

From source file:org.elasticsearch.test.engine.MockInternalEngine.java

License:Apache License

@Override
protected Searcher newSearcher(String source, IndexSearcher searcher, SearcherManager manager)
        throws EngineException {

    IndexReader reader = searcher.getIndexReader();
    IndexReader wrappedReader = reader;/*from  w  w w.ja v a2 s  .  co m*/
    if (reader instanceof DirectoryReader && wrapReader) {
        wrappedReader = wrapReader((DirectoryReader) reader);
    }
    // this executes basic query checks and asserts that weights are normalized only once etc.
    final AssertingIndexSearcher assertingIndexSearcher = new AssertingIndexSearcher(random, wrappedReader);
    assertingIndexSearcher.setSimilarity(searcher.getSimilarity());
    // pass the original searcher to the super.newSearcher() method to make sure this is the searcher that will
    // be released later on. If we wrap an index reader here must not pass the wrapped version to the manager
    // on release otherwise the reader will be closed too early. - good news, stuff will fail all over the place if we don't get this right here
    return new AssertingSearcher(assertingIndexSearcher, super.newSearcher(source, searcher, manager), shardId);
}

From source file:org.elasticsearch.test.engine.MockRobinEngine.java

License:Apache License

@Override
protected Searcher newSearcher(String source, IndexSearcher searcher, SearcherManager manager)
        throws EngineException {
    // this executes basic query checks and asserts that weights are normalized only once etc.
    final AssertingIndexSearcher assertingIndexSearcher = new AssertingIndexSearcher(random,
            searcher.getTopReaderContext());
    assertingIndexSearcher.setSimilarity(searcher.getSimilarity());
    return new AssertingSearcher(super.newSearcher(source, assertingIndexSearcher, manager), shardId);
}

From source file:org.elasticsearch.test.engine.MockSharedFSEngine.java

License:Apache License

@Override
protected Searcher newSearcher(String source, IndexSearcher searcher, SearcherManager manager)
        throws EngineException {
    final AssertingIndexSearcher assertingIndexSearcher = support().newSearcher(this, source, searcher,
            manager);/*from  ww w.  ja  v a 2 s.c  o  m*/
    assertingIndexSearcher.setSimilarity(searcher.getSimilarity());
    // pass the original searcher to the super.newSearcher() method to make sure this is the searcher that will
    // be released later on. If we wrap an index reader here must not pass the wrapped version to the manager
    // on release otherwise the reader will be closed too early. - good news, stuff will fail all over the place if we don't get this right here
    return new AssertingSearcher(assertingIndexSearcher, super.newSearcher(source, searcher, manager), shardId,
            MockEngineSupport.INFLIGHT_ENGINE_SEARCHERS, logger);
}