19
19
20
20
package org .elasticsearch .index .query ;
21
21
22
+ import org .apache .lucene .search .BooleanClause ;
23
+ import org .apache .lucene .search .BooleanQuery ;
22
24
import org .apache .lucene .search .ConstantScoreQuery ;
23
25
import org .apache .lucene .search .Query ;
26
+ import org .apache .lucene .search .TermRangeQuery ;
24
27
import org .elasticsearch .cluster .metadata .MetaData ;
28
+ import org .elasticsearch .common .lucene .search .Queries ;
29
+ import org .elasticsearch .index .mapper .FieldMapper ;
30
+ import org .elasticsearch .index .mapper .internal .FieldNamesFieldMapper ;
25
31
26
32
import java .io .IOException ;
33
+ import java .util .Collection ;
27
34
28
35
import static org .hamcrest .Matchers .equalTo ;
29
36
@@ -36,7 +43,27 @@ protected ExistsQueryBuilder createEmptyQueryBuilder() {
36
43
37
44
@ Override
38
45
protected Query createExpectedQuery (ExistsQueryBuilder queryBuilder , QueryParseContext context ) throws IOException {
39
- return ExistsQueryBuilder .newFilter (context , queryBuilder .name (), queryBuilder .queryName ());
46
+ final FieldNamesFieldMapper fieldNamesMapper = (FieldNamesFieldMapper )context .mapperService ().fullName (FieldNamesFieldMapper .NAME );
47
+ Collection <String > fields = context .simpleMatchToIndexNames (queryBuilder .name ());
48
+
49
+ if (fields .isEmpty ()) {
50
+ return Queries .newMatchNoDocsQuery ();
51
+ }
52
+
53
+ BooleanQuery boolFilter = new BooleanQuery ();
54
+ for (String field : fields ) {
55
+ if (fieldNamesMapper == null || !fieldNamesMapper .enabled ()) {
56
+ FieldMapper mapper = context .fieldMapper (field );
57
+ if (mapper == null ) {
58
+ boolFilter .add (new TermRangeQuery (field , null , null , true , true ), BooleanClause .Occur .SHOULD );
59
+ } else {
60
+ boolFilter .add (mapper .rangeQuery (null , null , true , true , context ), BooleanClause .Occur .SHOULD );
61
+ }
62
+ } else {
63
+ boolFilter .add (fieldNamesMapper .termQuery (field , context ), BooleanClause .Occur .SHOULD );
64
+ }
65
+ }
66
+ return new ConstantScoreQuery (boolFilter );
40
67
}
41
68
42
69
@ Override
@@ -46,25 +73,31 @@ protected void assertLuceneQuery(ExistsQueryBuilder queryBuilder, Query query, Q
46
73
if (query instanceof ConstantScoreQuery ) {
47
74
// get the inner filter which is the one stored unter query_name
48
75
query = ((ConstantScoreQuery ) query ).getQuery ();
76
+ assertThat (namedQuery , equalTo (query ));
77
+ } else {
78
+ assertNull (namedQuery );
49
79
}
50
- assertThat (namedQuery , equalTo (query ));
51
80
}
52
81
}
53
82
54
83
@ Override
55
84
protected ExistsQueryBuilder createTestQueryBuilder () {
56
- ExistsQueryBuilder query ;
85
+ String fieldPattern ;
57
86
if (frequently ()) {
58
- // simple field pattern
59
- query = new ExistsQueryBuilder (randomAsciiOfLengthBetween (1 , 10 ));
87
+ fieldPattern = mappedFieldNames [randomIntBetween (0 , mappedFieldNames .length - 1 )];
60
88
} else {
61
- // All or wildcard pattern
89
+ fieldPattern = randomAsciiOfLengthBetween (1 , 10 );
90
+ }
91
+ // also sometimes test wildcard patterns
92
+ if (randomBoolean ()) {
62
93
if (randomBoolean ()) {
63
- query = new ExistsQueryBuilder ( MetaData . ALL ) ;
94
+ fieldPattern = fieldPattern + "*" ;
64
95
} else {
65
- query = new ExistsQueryBuilder ( randomAsciiOfLengthBetween ( 1 , 3 ) + "*" ) ;
96
+ fieldPattern = MetaData . ALL ;
66
97
}
67
98
}
99
+ ExistsQueryBuilder query = new ExistsQueryBuilder (fieldPattern );
100
+
68
101
if (randomBoolean ()) {
69
102
query .queryName (randomAsciiOfLengthBetween (1 , 10 ));
70
103
}
0 commit comments