|
44 | 44 | import org.apache.lucene.index.IndexOptions; |
45 | 45 | import org.apache.lucene.index.IndexWriterConfig; |
46 | 46 | import org.apache.lucene.index.Term; |
| 47 | +import org.apache.lucene.index.LeafReaderContext; |
47 | 48 | import org.apache.lucene.queries.CommonTermsQuery; |
48 | 49 | import org.apache.lucene.search.BooleanClause; |
49 | 50 | import org.apache.lucene.search.BooleanQuery; |
|
56 | 57 | import org.apache.lucene.search.TermQuery; |
57 | 58 | import org.apache.lucene.search.TopDocs; |
58 | 59 | import org.apache.lucene.search.highlight.DefaultEncoder; |
| 60 | +import org.apache.lucene.search.join.BitSetProducer; |
| 61 | +import org.apache.lucene.search.join.ScoreMode; |
59 | 62 | import org.apache.lucene.search.uhighlight.UnifiedHighlighter; |
60 | 63 | import org.apache.lucene.store.Directory; |
61 | 64 | import org.apache.lucene.tests.index.RandomIndexWriter; |
| 65 | +import org.apache.lucene.util.BitSet; |
| 66 | +import org.apache.lucene.util.FixedBitSet; |
62 | 67 | import org.opensearch.common.lucene.search.MultiPhrasePrefixQuery; |
63 | 68 | import org.opensearch.core.common.Strings; |
| 69 | +import org.opensearch.index.search.OpenSearchToParentBlockJoinQuery; |
64 | 70 | import org.opensearch.test.OpenSearchTestCase; |
65 | 71 |
|
| 72 | +import java.io.IOException; |
66 | 73 | import java.text.BreakIterator; |
67 | 74 | import java.util.Locale; |
68 | 75 |
|
@@ -335,4 +342,34 @@ public void testOverlappingTerms() throws Exception { |
335 | 342 | assertHighlightOneDoc("text", inputs, analyzer, query, Locale.ROOT, BreakIterator.getSentenceInstance(Locale.ROOT), 0, outputs); |
336 | 343 | } |
337 | 344 |
|
| 345 | + public void testOpenSearchToParentBlockJoinQuery() throws Exception { |
| 346 | + final String[] inputs = { "Nested highlighting query." }; |
| 347 | + final String[] outputs = { "Nested <b>highlighting</b> query." }; |
| 348 | + |
| 349 | + Query childQuery = new TermQuery(new Term("text", "highlighting")); |
| 350 | + BitSetProducer parentsFilter = new BitSetProducer() { |
| 351 | + @Override |
| 352 | + public BitSet getBitSet(LeafReaderContext context) throws IOException { |
| 353 | + FixedBitSet bits = new FixedBitSet(context.reader().maxDoc()); |
| 354 | + for (int i = 0; i < context.reader().maxDoc(); i++) { |
| 355 | + bits.set(i); |
| 356 | + } |
| 357 | + return bits; |
| 358 | + } |
| 359 | + }; |
| 360 | + |
| 361 | + Query parentQuery = new OpenSearchToParentBlockJoinQuery(childQuery, parentsFilter, ScoreMode.None, "foo"); |
| 362 | + assertHighlightOneDoc( |
| 363 | + "text", |
| 364 | + inputs, |
| 365 | + new StandardAnalyzer(), |
| 366 | + parentQuery, |
| 367 | + Locale.ROOT, |
| 368 | + BreakIterator.getSentenceInstance(Locale.ROOT), |
| 369 | + 0, |
| 370 | + outputs |
| 371 | + ); |
| 372 | + } |
| 373 | + |
| 374 | + |
338 | 375 | } |
0 commit comments