Java Code Examples for org.apache.lucene.search.Weight#explain()
The following examples show how to use
org.apache.lucene.search.Weight#explain() .
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: ToParentBlockJoinQuery.java From lucene-solr with Apache License 2.0 | 6 votes |
public Explanation explain(LeafReaderContext context, Weight childWeight) throws IOException { int prevParentDoc = parentBits.prevSetBit(parentApproximation.docID() - 1); int start = context.docBase + prevParentDoc + 1; // +1 b/c prevParentDoc is previous parent doc int end = context.docBase + parentApproximation.docID() - 1; // -1 b/c parentDoc is parent doc Explanation bestChild = null; int matches = 0; for (int childDoc = start; childDoc <= end; childDoc++) { Explanation child = childWeight.explain(context, childDoc - context.docBase); if (child.isMatch()) { matches++; if (bestChild == null || child.getValue().floatValue() > bestChild.getValue().floatValue()) { bestChild = child; } } } return Explanation.match(score(), String.format(Locale.ROOT, "Score based on %d child docs in range from %d to %d, best match:", matches, start, end), bestChild ); }
Example 2
Source File: LTRRescorer.java From lucene-solr with Apache License 2.0 | 5 votes |
@Override public Explanation explain(IndexSearcher searcher, Explanation firstPassExplanation, int docID) throws IOException { final List<LeafReaderContext> leafContexts = searcher.getTopReaderContext() .leaves(); final int n = ReaderUtil.subIndex(docID, leafContexts); final LeafReaderContext context = leafContexts.get(n); final int deBasedDoc = docID - context.docBase; final Weight modelWeight = searcher.createWeight(searcher.rewrite(scoringQuery), ScoreMode.COMPLETE, 1); return modelWeight.explain(context, deBasedDoc); }
Example 3
Source File: LuceneTermQueryBuilderTest.java From querqy with Apache License 2.0 | 5 votes |
@Test public void testThatQueryUsesTermButNoFieldBoost() throws Exception { Analyzer analyzer = new StandardAnalyzer(); Directory directory = new ByteBuffersDirectory(); IndexWriterConfig config = new IndexWriterConfig(analyzer); config.setSimilarity(new ClassicSimilarity()); IndexWriter indexWriter = new IndexWriter(directory, config); TestUtil.addNumDocsWithTextField("f1", "v1 v1", indexWriter, 4); TestUtil.addNumDocsWithTextField("f1", "v2", indexWriter, 1); indexWriter.close(); IndexReader indexReader = DirectoryReader.open(directory); IndexSearcher indexSearcher = new IndexSearcher(indexReader); indexSearcher.setSimilarity(new ClassicSimilarity()); final TermQuery termQuery = new LuceneTermQueryBuilder() .createTermQuery(new Term("f1", "v1"), new ConstantFieldBoost(3f)); final Term term = termQuery.getTerm(); assertEquals("f1", term.field()); assertEquals("v1", term.text()); TopDocs topDocs = indexSearcher.search(termQuery, 10); final Weight weight = termQuery.createWeight(indexSearcher, ScoreMode.COMPLETE, 4.5f); final Explanation explain = weight.explain(indexReader.getContext().leaves().get(0), topDocs.scoreDocs[0].doc); String explainText = explain.toString(); assertTrue(explainText.contains("4.5 = boost")); // 4.5 (query) but ignore field boost assertTrue(explainText.contains("4 = docFreq")); // 4 * v1 assertTrue(explainText.contains("2.0 = freq")); // 2 * v1 in field }
Example 4
Source File: DependentTermQueryBuilderTest.java From querqy with Apache License 2.0 | 4 votes |
@Test public void testCreateWeight() throws Exception { Analyzer analyzer = new StandardAnalyzer(); Directory directory = new ByteBuffersDirectory(); IndexWriterConfig config = new IndexWriterConfig(analyzer); config.setSimilarity(new ClassicSimilarity()); IndexWriter indexWriter = new IndexWriter(directory, config); TestUtil.addNumDocsWithTextField("f1", "v1", indexWriter, 4); TestUtil.addNumDocsWithTextField("f2", "v1 v1", indexWriter, 1); indexWriter.close(); IndexReader indexReader = DirectoryReader.open(directory); IndexSearcher indexSearcher = new IndexSearcher(indexReader); indexSearcher.setSimilarity(new ClassicSimilarity()); DocumentFrequencyCorrection dfc = new DocumentFrequencyCorrection(); Term qTerm1 = new Term("f1", "v1"); Term qTerm2 = new Term("f2", "v1"); dfc.newClause(); dfc.prepareTerm(qTerm1); dfc.prepareTerm(qTerm2); dfc.finishedUserQuery(); DependentTermQueryBuilder.DependentTermQuery query1 = new DependentTermQueryBuilder(dfc) .createTermQuery(qTerm1, fieldBoost1); DependentTermQueryBuilder.DependentTermQuery query2 = new DependentTermQueryBuilder(dfc) .createTermQuery(qTerm2, fieldBoost2); TopDocs topDocs = indexSearcher.search(query2, 10); final Weight weight2 = query2.createWeight(indexSearcher, ScoreMode.COMPLETE, 4.5f); final Explanation explain = weight2.explain(indexReader.leaves().get(0), topDocs.scoreDocs[0].doc); String explainText = explain.toString(); assertTrue(explainText.contains("9.0 = boost")); // 4.5 (query) * 2.0 (field) assertTrue(explainText.contains("4 = docFreq")); // 4 * df of f1:v1 assertTrue(explainText.contains("2.0 = freq")); // don't use tf indexReader.close(); directory.close(); analyzer.close(); }
Example 5
Source File: FieldBoostTermQueryBuilderTest.java From querqy with Apache License 2.0 | 3 votes |
@Test public void testCreateWeight() throws Exception { Analyzer analyzer = new KeywordAnalyzer(); Directory directory = newDirectory(); RandomIndexWriter indexWriter = new RandomIndexWriter(random(), directory, analyzer); TestUtil.addNumDocsWithStringField("f1", "v1", indexWriter, 4); TestUtil.addNumDocsWithStringField("f1", "v2", indexWriter, 1); indexWriter.close(); IndexReader indexReader = DirectoryReader.open(directory); IndexSearcher indexSearcher = newSearcher(indexReader); indexSearcher.setSimilarity(new ClassicSimilarity()); Term term = new Term("f1", "v1"); FieldBoostTermQueryBuilder.FieldBoostTermQuery query = new FieldBoostTermQueryBuilder().createTermQuery(term, fieldBoost2); TopDocs topDocs = indexSearcher.search(query, 10); final Weight weight = query.createWeight(indexSearcher, ScoreMode.COMPLETE, 4.5f); final Explanation explain = weight.explain(indexReader.getContext().leaves().get(0), topDocs.scoreDocs[0].doc); String explainText = explain.toString(); assertTrue(explainText.contains("4.5 = queryBoost")); // 4.5 (query) assertTrue(explainText.contains("2.0 = fieldBoost")); // 2.0 (field) assertTrue(explainText.contains("ConstantFieldBoost(f1^2.0)")); // 2.0 (field) assertFalse(explainText.toLowerCase().contains("freq")); // no doc freq indexReader.close(); directory.close(); analyzer.close(); }
Example 6
Source File: SimilarityTermQueryBuilderTest.java From querqy with Apache License 2.0 | 2 votes |
@Test public void testCreateWeight() throws Exception { Analyzer analyzer = new StandardAnalyzer(); Directory directory = new ByteBuffersDirectory(); IndexWriterConfig config = new IndexWriterConfig(analyzer); config.setSimilarity(new ClassicSimilarity()); IndexWriter indexWriter = new IndexWriter(directory, config); TestUtil.addNumDocsWithTextField("f1", "v1 v1", indexWriter, 4); TestUtil.addNumDocsWithTextField("f1", "v2", indexWriter, 1); indexWriter.close(); IndexReader indexReader = DirectoryReader.open(directory); IndexSearcher indexSearcher = new IndexSearcher(indexReader); indexSearcher.setSimilarity(new ClassicSimilarity()); Term term = new Term("f1", "v1"); SimilarityTermQuery query = new SimilarityTermQueryBuilder().createTermQuery(term, fieldBoost2); TopDocs topDocs = indexSearcher.search(query, 10); final Weight weight = query.createWeight(indexSearcher, ScoreMode.COMPLETE, 4.5f); final Explanation explain = weight.explain(indexReader.getContext().leaves().get(0), topDocs.scoreDocs[0].doc); String explainText = explain.toString(); assertTrue(explainText.contains("9.0 = boost")); // 4.5 (query) * 2.0 (field) assertTrue(explainText.contains("4 = docFreq")); // 4 * v1 assertTrue(explainText.contains("2.0 = freq")); // 2 * v1 in field indexReader.close(); directory.close(); analyzer.close(); }