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 =