List of usage examples for org.apache.lucene.search IndexSearcher getSimilarity
public Similarity getSimilarity()
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); }