20
20
import org .elasticsearch .common .lucene .search .AutomatonQueries ;
21
21
import org .elasticsearch .common .unit .Fuzziness ;
22
22
import org .elasticsearch .index .mapper .FieldTypeTestCase ;
23
+ import org .elasticsearch .index .mapper .ValueFetcher ;
23
24
import org .elasticsearch .index .mapper .flattened .FlattenedFieldMapper .KeyedFlattenedFieldType ;
25
+ import org .elasticsearch .index .query .SearchExecutionContext ;
26
+ import org .elasticsearch .search .lookup .SourceLookup ;
24
27
25
28
import java .io .IOException ;
26
29
import java .util .ArrayList ;
27
30
import java .util .Collections ;
28
31
import java .util .List ;
29
32
import java .util .Map ;
30
33
34
+ import static org .mockito .Mockito .mock ;
35
+ import static org .mockito .Mockito .when ;
36
+
31
37
public class KeyedFlattenedFieldTypeTests extends FieldTypeTestCase {
32
38
33
39
private static KeyedFlattenedFieldType createFieldType () {
@@ -50,23 +56,22 @@ public void testIndexedValueForSearch() {
50
56
public void testTermQuery () {
51
57
KeyedFlattenedFieldType ft = createFieldType ();
52
58
53
- Query expected = new TermQuery (new Term ("field" , "key\0 value" ));
59
+ Query expected = new TermQuery (new Term (ft . name () , "key\0 value" ));
54
60
assertEquals (expected , ft .termQuery ("value" , null ));
55
61
56
- expected = AutomatonQueries .caseInsensitiveTermQuery (new Term ("field" , "key\0 value" ));
62
+ expected = AutomatonQueries .caseInsensitiveTermQuery (new Term (ft . name () , "key\0 value" ));
57
63
assertEquals (expected , ft .termQueryCaseInsensitive ("value" , null ));
58
64
59
- KeyedFlattenedFieldType unsearchable = new KeyedFlattenedFieldType ("field" , false , true , "key" ,
60
- false , Collections .emptyMap ());
65
+ KeyedFlattenedFieldType unsearchable = new KeyedFlattenedFieldType ("field" , false , true , "key" , false , Collections .emptyMap ());
61
66
IllegalArgumentException e = expectThrows (IllegalArgumentException .class ,
62
67
() -> unsearchable .termQuery ("field" , null ));
63
- assertEquals ("Cannot search on field [field ] since it is not indexed." , e .getMessage ());
68
+ assertEquals ("Cannot search on field [" + ft . name () + " ] since it is not indexed." , e .getMessage ());
64
69
}
65
70
66
71
public void testTermsQuery () {
67
72
KeyedFlattenedFieldType ft = createFieldType ();
68
73
69
- Query expected = new TermInSetQuery ("field" ,
74
+ Query expected = new TermInSetQuery (ft . name () ,
70
75
new BytesRef ("key\0 value1" ),
71
76
new BytesRef ("key\0 value2" ));
72
77
@@ -81,17 +86,17 @@ public void testTermsQuery() {
81
86
public void testExistsQuery () {
82
87
KeyedFlattenedFieldType ft = createFieldType ();
83
88
84
- Query expected = new PrefixQuery (new Term ("field" , "key\0 " ));
89
+ Query expected = new PrefixQuery (new Term (ft . name () , "key\0 " ));
85
90
assertEquals (expected , ft .existsQuery (null ));
86
91
}
87
92
88
93
public void testPrefixQuery () {
89
94
KeyedFlattenedFieldType ft = createFieldType ();
90
95
91
- Query expected = new PrefixQuery (new Term ("field" , "key\0 val" ));
96
+ Query expected = new PrefixQuery (new Term (ft . name () , "key\0 val" ));
92
97
assertEquals (expected , ft .prefixQuery ("val" , MultiTermQuery .CONSTANT_SCORE_REWRITE , false , MOCK_CONTEXT ));
93
98
94
- expected = AutomatonQueries .caseInsensitivePrefixQuery (new Term ("field" , "key\0 vAl" ));
99
+ expected = AutomatonQueries .caseInsensitivePrefixQuery (new Term (ft . name () , "key\0 vAl" ));
95
100
assertEquals (expected , ft .prefixQuery ("vAl" , MultiTermQuery .CONSTANT_SCORE_REWRITE , true , MOCK_CONTEXT ));
96
101
97
102
ElasticsearchException ee = expectThrows (ElasticsearchException .class ,
@@ -111,12 +116,12 @@ public void testFuzzyQuery() {
111
116
public void testRangeQuery () {
112
117
KeyedFlattenedFieldType ft = createFieldType ();
113
118
114
- TermRangeQuery expected = new TermRangeQuery ("field" ,
119
+ TermRangeQuery expected = new TermRangeQuery (ft . name () ,
115
120
new BytesRef ("key\0 lower" ),
116
121
new BytesRef ("key\0 upper" ), false , false );
117
122
assertEquals (expected , ft .rangeQuery ("lower" , "upper" , false , false , MOCK_CONTEXT ));
118
123
119
- expected = new TermRangeQuery ("field" ,
124
+ expected = new TermRangeQuery (ft . name () ,
120
125
new BytesRef ("key\0 lower" ),
121
126
new BytesRef ("key\0 upper" ), true , true );
122
127
assertEquals (expected , ft .rangeQuery ("lower" , "upper" , true , true , MOCK_CONTEXT ));
@@ -160,4 +165,23 @@ public void testFetchIsEmpty() throws IOException {
160
165
assertEquals (Collections .emptyList (), fetchSourceValue (ft , sourceValue ));
161
166
assertEquals (Collections .emptyList (), fetchSourceValue (ft , null ));
162
167
}
168
+
169
+ public void testFetchSourceValue () throws IOException {
170
+ KeyedFlattenedFieldType ft = createFieldType ();
171
+ Map <String , Object > sourceValue = Collections .singletonMap ("key" , "value" );
172
+
173
+ SearchExecutionContext searchExecutionContext = mock (SearchExecutionContext .class );
174
+ when (searchExecutionContext .sourcePath ("field.key" )).thenReturn (Collections .singleton ("field.key" ));
175
+
176
+ ValueFetcher fetcher = ft .valueFetcher (searchExecutionContext , null );
177
+ SourceLookup lookup = new SourceLookup ();
178
+ lookup .setSource (Collections .singletonMap ("field" , sourceValue ));
179
+
180
+ assertEquals (Collections .singletonList ("value" ), fetcher .fetchValues (lookup ));
181
+ lookup .setSource (Collections .singletonMap ("field" , null ));
182
+ assertEquals (Collections .emptyList (), fetcher .fetchValues (lookup ));
183
+
184
+ IllegalArgumentException e = expectThrows (IllegalArgumentException .class , () -> ft .valueFetcher (searchExecutionContext , "format" ));
185
+ assertEquals ("Field [field.key] of type [flattened] doesn't support formats." , e .getMessage ());
186
+ }
163
187
}
0 commit comments