You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by jp...@apache.org on 2024/10/14 12:19:30 UTC

(lucene) branch main updated: IndexOrDocValuesQuery in query highlighting (#13902)

This is an automated email from the ASF dual-hosted git repository.

jpountz pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/lucene.git


The following commit(s) were added to refs/heads/main by this push:
     new ada7eda517d IndexOrDocValuesQuery in query highlighting (#13902)
ada7eda517d is described below

commit ada7eda517d5d2a014b3aba2b1453fcac96db2e8
Author: Prudhvi Godithi <pg...@amazon.com>
AuthorDate: Mon Oct 14 05:19:24 2024 -0700

    IndexOrDocValuesQuery in query highlighting (#13902)
    
    Signed-off-by: Prudhvi Godithi <pg...@amazon.com>
---
 lucene/CHANGES.txt                                 |  1 +
 .../highlight/WeightedSpanTermExtractor.java       |  6 ++++++
 .../lucene/search/highlight/TestHighlighter.java   | 23 ++++++++++++++++++++++
 3 files changed, 30 insertions(+)

diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt
index 50730c2d8ab..1413e09ff32 100644
--- a/lucene/CHANGES.txt
+++ b/lucene/CHANGES.txt
@@ -54,6 +54,7 @@ Bug Fixes
 * GITHUB#13832: Fixed an issue where the DefaultPassageFormatter.format method did not format passages as intended
   when they were not sorted by startOffset. (Seunghan Jung)
 * GITHUB#13884: Remove broken .toArray from Long/CharObjectHashMap entirely. (Pan Guixin)
+* GITHUB#12686: Added support for highlighting IndexOrDocValuesQuery. (Prudhvi Godithi)
 
 Build
 ---------------------
diff --git a/lucene/highlighter/src/java/org/apache/lucene/search/highlight/WeightedSpanTermExtractor.java b/lucene/highlighter/src/java/org/apache/lucene/search/highlight/WeightedSpanTermExtractor.java
index c4cd50274f1..b94f73baefb 100644
--- a/lucene/highlighter/src/java/org/apache/lucene/search/highlight/WeightedSpanTermExtractor.java
+++ b/lucene/highlighter/src/java/org/apache/lucene/search/highlight/WeightedSpanTermExtractor.java
@@ -54,6 +54,7 @@ import org.apache.lucene.search.BoostQuery;
 import org.apache.lucene.search.ConstantScoreQuery;
 import org.apache.lucene.search.DisjunctionMaxQuery;
 import org.apache.lucene.search.FieldExistsQuery;
+import org.apache.lucene.search.IndexOrDocValuesQuery;
 import org.apache.lucene.search.IndexSearcher;
 import org.apache.lucene.search.MatchAllDocsQuery;
 import org.apache.lucene.search.MultiPhraseQuery;
@@ -163,6 +164,11 @@ public class WeightedSpanTermExtractor {
             new SpanNearQuery(clauses, phraseQuery.getSlop() + positionGaps, inorder);
         extractWeightedSpanTerms(terms, sp, boost);
       }
+    } else if (query instanceof IndexOrDocValuesQuery) {
+      Query indexQuery = ((IndexOrDocValuesQuery) query).getIndexQuery();
+      if (indexQuery != null) {
+        extract(indexQuery, boost, terms);
+      }
     } else if (query instanceof TermQuery || query instanceof SynonymQuery) {
       extractWeightedTerms(terms, query, boost);
     } else if (query instanceof SpanQuery) {
diff --git a/lucene/highlighter/src/test/org/apache/lucene/search/highlight/TestHighlighter.java b/lucene/highlighter/src/test/org/apache/lucene/search/highlight/TestHighlighter.java
index cee95a0ee16..a379cf26e6c 100644
--- a/lucene/highlighter/src/test/org/apache/lucene/search/highlight/TestHighlighter.java
+++ b/lucene/highlighter/src/test/org/apache/lucene/search/highlight/TestHighlighter.java
@@ -59,12 +59,14 @@ import org.apache.lucene.queries.spans.SpanNotQuery;
 import org.apache.lucene.queries.spans.SpanOrQuery;
 import org.apache.lucene.queries.spans.SpanQuery;
 import org.apache.lucene.queries.spans.SpanTermQuery;
+import org.apache.lucene.search.BooleanClause;
 import org.apache.lucene.search.BooleanClause.Occur;
 import org.apache.lucene.search.BooleanQuery;
 import org.apache.lucene.search.ConstantScoreQuery;
 import org.apache.lucene.search.DoubleValuesSource;
 import org.apache.lucene.search.FieldExistsQuery;
 import org.apache.lucene.search.FuzzyQuery;
+import org.apache.lucene.search.IndexOrDocValuesQuery;
 import org.apache.lucene.search.IndexSearcher;
 import org.apache.lucene.search.MultiPhraseQuery;
 import org.apache.lucene.search.MultiTermQuery;
@@ -255,6 +257,27 @@ public class TestHighlighter extends BaseTokenStreamTestCase implements Formatte
     assertEquals("John <B>Kennedy</B> has been shot", fragment);
   }
 
+  public void testHighlightingIndexOrDocValuesQuery() throws Exception {
+    searcher = newSearcher(reader);
+    BooleanQuery.Builder booleanQueryBuilder = new BooleanQuery.Builder();
+    booleanQueryBuilder.add(new TermQuery(new Term(FIELD_NAME, "jfk")), BooleanClause.Occur.SHOULD);
+    booleanQueryBuilder.add(
+        new TermQuery(new Term(FIELD_NAME, "kennedy")), BooleanClause.Occur.SHOULD);
+    Query indexQuery = booleanQueryBuilder.build();
+    Query dvQuery = TermRangeQuery.newStringRange(FIELD_NAME, "a", "z", true, true);
+    Query query = new IndexOrDocValuesQuery(indexQuery, dvQuery);
+    QueryScorer scorer = new QueryScorer(query, FIELD_NAME);
+    Highlighter highlighter = new Highlighter(scorer);
+    TokenStream stream = getAnyTokenStream(FIELD_NAME, 2);
+    String storedField = searcher.storedFields().document(2).get(FIELD_NAME);
+    String fragment = highlighter.getBestFragment(stream, storedField);
+    assertEquals("<B>JFK</B> has been shot", fragment);
+    stream = getAnyTokenStream(FIELD_NAME, 3);
+    storedField = searcher.storedFields().document(3).get(FIELD_NAME);
+    fragment = highlighter.getBestFragment(stream, storedField);
+    assertEquals("John <B>Kennedy</B> has been shot", fragment);
+  }
+
   public void testHighlightUnknownQueryAfterRewrite()
       throws IOException, InvalidTokenOffsetsException {
     Query query =