|
26 | 26 | import org.apache.lucene.index.IndexableField;
|
27 | 27 | import org.apache.lucene.index.IndexableFieldType;
|
28 | 28 | import org.apache.lucene.index.Term;
|
| 29 | +import org.apache.lucene.queryparser.classic.ParseException; |
29 | 30 | import org.apache.lucene.search.BooleanClause;
|
30 | 31 | import org.apache.lucene.search.BooleanQuery;
|
31 | 32 | import org.apache.lucene.search.ConstantScoreQuery;
|
32 | 33 | import org.apache.lucene.search.DisjunctionMaxQuery;
|
33 | 34 | import org.apache.lucene.search.MatchNoDocsQuery;
|
34 | 35 | import org.apache.lucene.search.MultiPhraseQuery;
|
| 36 | +import org.apache.lucene.search.NormsFieldExistsQuery; |
35 | 37 | import org.apache.lucene.search.Query;
|
36 | 38 | import org.apache.lucene.search.SynonymQuery;
|
37 | 39 | import org.apache.lucene.search.TermQuery;
|
38 | 40 | import org.apache.lucene.search.spans.FieldMaskingSpanQuery;
|
39 | 41 | import org.apache.lucene.search.spans.SpanNearQuery;
|
40 | 42 | import org.apache.lucene.search.spans.SpanTermQuery;
|
| 43 | +import org.elasticsearch.Version; |
41 | 44 | import org.elasticsearch.common.lucene.search.MultiPhrasePrefixQuery;
|
42 | 45 | import org.elasticsearch.common.xcontent.XContentBuilder;
|
43 | 46 | import org.elasticsearch.index.IndexSettings;
|
|
54 | 57 | import org.elasticsearch.index.query.MatchPhraseQueryBuilder;
|
55 | 58 | import org.elasticsearch.index.query.MultiMatchQueryBuilder;
|
56 | 59 | import org.elasticsearch.index.query.QueryShardContext;
|
| 60 | +import org.elasticsearch.index.search.QueryStringQueryParser; |
57 | 61 | import org.elasticsearch.plugins.Plugin;
|
58 | 62 |
|
59 | 63 | import java.io.IOException;
|
|
74 | 78 | import static org.hamcrest.Matchers.hasSize;
|
75 | 79 | import static org.hamcrest.Matchers.notNullValue;
|
76 | 80 | import static org.hamcrest.core.IsInstanceOf.instanceOf;
|
| 81 | +import static org.mockito.Mockito.when; |
77 | 82 |
|
78 | 83 | public class SearchAsYouTypeFieldMapperTests extends MapperTestCase {
|
79 | 84 |
|
@@ -534,6 +539,35 @@ public void testMatchPhrase() throws IOException {
|
534 | 539 | }
|
535 | 540 | }
|
536 | 541 |
|
| 542 | + public void testNestedExistsQuery() throws IOException, ParseException { |
| 543 | + MapperService ms = createMapperService(mapping(b -> { |
| 544 | + b.startObject("foo"); |
| 545 | + { |
| 546 | + b.field("type", "object"); |
| 547 | + b.startObject("properties"); |
| 548 | + { |
| 549 | + b.startObject("bar"); |
| 550 | + { |
| 551 | + b.field("type", "search_as_you_type"); |
| 552 | + } |
| 553 | + b.endObject(); |
| 554 | + } |
| 555 | + b.endObject(); |
| 556 | + } |
| 557 | + b.endObject(); |
| 558 | + })); |
| 559 | + QueryShardContext qsc = createQueryShardContext(ms); |
| 560 | + when(qsc.indexVersionCreated()).thenReturn(Version.CURRENT); |
| 561 | + QueryStringQueryParser parser = new QueryStringQueryParser(qsc, "f"); |
| 562 | + Query q = parser.parse("foo:*"); |
| 563 | + assertEquals(new ConstantScoreQuery(new BooleanQuery.Builder() |
| 564 | + .add(new NormsFieldExistsQuery("foo.bar"), BooleanClause.Occur.SHOULD) |
| 565 | + .add(new NormsFieldExistsQuery("foo.bar._3gram"), BooleanClause.Occur.SHOULD) |
| 566 | + .add(new NormsFieldExistsQuery("foo.bar._2gram"), BooleanClause.Occur.SHOULD) |
| 567 | + .add(new TermQuery(new Term("_field_names", "foo.bar._index_prefix")), BooleanClause.Occur.SHOULD) |
| 568 | + .build()), q); |
| 569 | + } |
| 570 | + |
537 | 571 | private static BooleanQuery buildBoolPrefixQuery(String shingleFieldName, String prefixFieldName, List<String> terms) {
|
538 | 572 | final BooleanQuery.Builder builder = new BooleanQuery.Builder();
|
539 | 573 | for (int i = 0; i < terms.size() - 1; i++) {
|
|
0 commit comments