@@ -63,9 +63,13 @@ public static List<Object[]> args() {
6363
6464 public enum Type {
6565 AUTO (false ),
66+
6667 CONSTANT_KEYWORD (false ),
6768 KEYWORD (false ),
68- // NOCOMMIT all these without keyword
69+ MATCH_ONLY_TEXT (false ),
70+ SEMANTIC_TEXT (true ),
71+ TEXT (false ),
72+
6973 MATCH_ONLY_TEXT_WITH_KEYWORD (false ),
7074 SEMANTIC_TEXT_WITH_KEYWORD (true ),
7175 TEXT_WITH_KEYWORD (false );
@@ -91,13 +95,14 @@ public void testEquality() throws IOException {
9195 """ ;
9296 String luceneQuery = switch (type ) {
9397 case AUTO , TEXT_WITH_KEYWORD -> "#test.keyword:%value -_ignored:test.keyword" ;
94- case KEYWORD -> "test:%value" ;
95- case CONSTANT_KEYWORD , MATCH_ONLY_TEXT_WITH_KEYWORD -> "*:*" ;
96- case SEMANTIC_TEXT_WITH_KEYWORD -> "FieldExistsQuery [field=_primary_term]" ;
98+ case KEYWORD , TEXT -> "test:%value" ;
99+ case CONSTANT_KEYWORD , MATCH_ONLY_TEXT , MATCH_ONLY_TEXT_WITH_KEYWORD -> "*:*" ;
100+ case SEMANTIC_TEXT , SEMANTIC_TEXT_WITH_KEYWORD -> "FieldExistsQuery [field=_primary_term]" ;
97101 };
98102 ComputeSignature dataNodeSignature = switch (type ) {
99103 case AUTO , CONSTANT_KEYWORD , KEYWORD , TEXT_WITH_KEYWORD -> ComputeSignature .FILTER_IN_QUERY ;
100- case MATCH_ONLY_TEXT_WITH_KEYWORD , SEMANTIC_TEXT_WITH_KEYWORD -> ComputeSignature .FILTER_IN_COMPUTE ;
104+ case MATCH_ONLY_TEXT , MATCH_ONLY_TEXT_WITH_KEYWORD , TEXT , SEMANTIC_TEXT , SEMANTIC_TEXT_WITH_KEYWORD ->
105+ ComputeSignature .FILTER_IN_COMPUTE ;
101106 };
102107 testPushQuery (value , esqlQuery , List .of (luceneQuery ), dataNodeSignature , true );
103108 }
@@ -109,14 +114,15 @@ public void testEqualityTooBigToPush() throws IOException {
109114 | WHERE test == "%value"
110115 """ ;
111116 List <String > luceneQuery = switch (type ) {
112- case AUTO , TEXT_WITH_KEYWORD -> emulateLargeTextTokens (value );
113- case CONSTANT_KEYWORD , MATCH_ONLY_TEXT_WITH_KEYWORD -> List .of ("*:*" );
117+ case AUTO , TEXT , TEXT_WITH_KEYWORD -> emulateLargeTextTokens (value );
118+ case CONSTANT_KEYWORD , MATCH_ONLY_TEXT , MATCH_ONLY_TEXT_WITH_KEYWORD -> List .of ("*:*" );
114119 case KEYWORD -> List .of ("#test:%value #single_value_match(test)" );
115- case SEMANTIC_TEXT_WITH_KEYWORD -> List .of ("FieldExistsQuery [field=_primary_term]" );
120+ case SEMANTIC_TEXT , SEMANTIC_TEXT_WITH_KEYWORD -> List .of ("FieldExistsQuery [field=_primary_term]" );
116121 };
117122 ComputeSignature dataNodeSignature = switch (type ) {
118123 case CONSTANT_KEYWORD , KEYWORD -> ComputeSignature .FILTER_IN_QUERY ;
119- case AUTO , MATCH_ONLY_TEXT_WITH_KEYWORD , SEMANTIC_TEXT_WITH_KEYWORD , TEXT_WITH_KEYWORD -> ComputeSignature .FILTER_IN_COMPUTE ;
124+ case AUTO , MATCH_ONLY_TEXT , MATCH_ONLY_TEXT_WITH_KEYWORD , SEMANTIC_TEXT , SEMANTIC_TEXT_WITH_KEYWORD , TEXT , TEXT_WITH_KEYWORD ->
125+ ComputeSignature .FILTER_IN_COMPUTE ;
120126 };
121127 testPushQuery (value , esqlQuery , luceneQuery , dataNodeSignature , type != Type .KEYWORD );
122128 }
@@ -125,7 +131,7 @@ public void testEqualityTooBigToPush() throws IOException {
125131 * {@code NOT !=} should function just like {@code ==}.
126132 */
127133 public void testNotInequality () throws IOException {
128- // NOCOMMIT
134+ // NOCOMMIT copy from previous commit
129135
130136 }
131137
@@ -140,13 +146,14 @@ public void testEqualityOrTooBig() throws IOException {
140146 | WHERE test == "%value" OR test == "%tooBig"
141147 """ .replace ("%tooBig" , tooBig );
142148 String luceneQuery = switch (type ) {
143- case AUTO , CONSTANT_KEYWORD , MATCH_ONLY_TEXT_WITH_KEYWORD , TEXT_WITH_KEYWORD -> "*:*" ;
149+ case AUTO , CONSTANT_KEYWORD , MATCH_ONLY_TEXT , MATCH_ONLY_TEXT_WITH_KEYWORD , TEXT , TEXT_WITH_KEYWORD -> "*:*" ;
144150 case KEYWORD -> "test:(%tooBig %value)" .replace ("%tooBig" , tooBig );
145- case SEMANTIC_TEXT_WITH_KEYWORD -> "FieldExistsQuery [field=_primary_term]" ;
151+ case SEMANTIC_TEXT , SEMANTIC_TEXT_WITH_KEYWORD -> "FieldExistsQuery [field=_primary_term]" ;
146152 };
147153 ComputeSignature dataNodeSignature = switch (type ) {
148154 case CONSTANT_KEYWORD , KEYWORD -> ComputeSignature .FILTER_IN_QUERY ;
149- case AUTO , MATCH_ONLY_TEXT_WITH_KEYWORD , SEMANTIC_TEXT_WITH_KEYWORD , TEXT_WITH_KEYWORD -> ComputeSignature .FILTER_IN_COMPUTE ;
155+ case AUTO , MATCH_ONLY_TEXT , MATCH_ONLY_TEXT_WITH_KEYWORD , SEMANTIC_TEXT , SEMANTIC_TEXT_WITH_KEYWORD , TEXT , TEXT_WITH_KEYWORD ->
156+ ComputeSignature .FILTER_IN_COMPUTE ;
150157 };
151158 testPushQuery (value , esqlQuery , List .of (luceneQuery ), dataNodeSignature , true );
152159 }
@@ -159,13 +166,15 @@ public void testEqualityOrOther() throws IOException {
159166 """ ;
160167 String luceneQuery = switch (type ) {
161168 case AUTO , TEXT_WITH_KEYWORD -> "(#test.keyword:%value -_ignored:test.keyword) foo:[2 TO 2]" ;
169+ case TEXT -> "#test:%value foo:[2 TO 2]" ;
162170 case KEYWORD -> "test:%value foo:[2 TO 2]" ;
163- case CONSTANT_KEYWORD , MATCH_ONLY_TEXT_WITH_KEYWORD -> "*:*" ;
164- case SEMANTIC_TEXT_WITH_KEYWORD -> "FieldExistsQuery [field=_primary_term]" ;
171+ case CONSTANT_KEYWORD , MATCH_ONLY_TEXT , MATCH_ONLY_TEXT_WITH_KEYWORD -> "*:*" ;
172+ case SEMANTIC_TEXT , SEMANTIC_TEXT_WITH_KEYWORD -> "FieldExistsQuery [field=_primary_term]" ;
165173 };
166174 ComputeSignature dataNodeSignature = switch (type ) {
167175 case AUTO , CONSTANT_KEYWORD , KEYWORD , TEXT_WITH_KEYWORD -> ComputeSignature .FILTER_IN_QUERY ;
168- case MATCH_ONLY_TEXT_WITH_KEYWORD , SEMANTIC_TEXT_WITH_KEYWORD -> ComputeSignature .FILTER_IN_COMPUTE ;
176+ case MATCH_ONLY_TEXT , MATCH_ONLY_TEXT_WITH_KEYWORD , SEMANTIC_TEXT , SEMANTIC_TEXT_WITH_KEYWORD , TEXT ->
177+ ComputeSignature .FILTER_IN_COMPUTE ;
169178 };
170179 testPushQuery (value , esqlQuery , List .of (luceneQuery ), dataNodeSignature , true );
171180 }
@@ -178,9 +187,10 @@ public void testEqualityAndOther() throws IOException {
178187 """ ;
179188 List <String > luceneQueryOptions = switch (type ) {
180189 case AUTO , TEXT_WITH_KEYWORD -> List .of ("#test.keyword:%value -_ignored:test.keyword #foo:[1 TO 1]" );
190+ case TEXT -> List .of ("#foo:[1 TO 1] #test:%value" );
181191 case KEYWORD -> List .of ("#test:%value #foo:[1 TO 1]" );
182- case CONSTANT_KEYWORD , MATCH_ONLY_TEXT_WITH_KEYWORD -> List .of ("foo:[1 TO 1]" );
183- case SEMANTIC_TEXT_WITH_KEYWORD ->
192+ case CONSTANT_KEYWORD , MATCH_ONLY_TEXT , MATCH_ONLY_TEXT_WITH_KEYWORD -> List .of ("foo:[1 TO 1]" );
193+ case SEMANTIC_TEXT , SEMANTIC_TEXT_WITH_KEYWORD ->
184194 /*
185195 * single_value_match is here because there are extra documents hiding in the index
186196 * that don't have the `foo` field.
@@ -189,7 +199,8 @@ public void testEqualityAndOther() throws IOException {
189199 };
190200 ComputeSignature dataNodeSignature = switch (type ) {
191201 case AUTO , CONSTANT_KEYWORD , KEYWORD , TEXT_WITH_KEYWORD -> ComputeSignature .FILTER_IN_QUERY ;
192- case MATCH_ONLY_TEXT_WITH_KEYWORD , SEMANTIC_TEXT_WITH_KEYWORD -> ComputeSignature .FILTER_IN_COMPUTE ;
202+ case MATCH_ONLY_TEXT , MATCH_ONLY_TEXT_WITH_KEYWORD , SEMANTIC_TEXT , SEMANTIC_TEXT_WITH_KEYWORD , TEXT ->
203+ ComputeSignature .FILTER_IN_COMPUTE ;
193204 };
194205 testPushQuery (value , esqlQuery , luceneQueryOptions , dataNodeSignature , true );
195206 }
@@ -202,13 +213,14 @@ public void testInequality() throws IOException {
202213 """ ;
203214 String luceneQuery = switch (type ) {
204215 case AUTO , TEXT_WITH_KEYWORD -> "(-test.keyword:%different_value #*:*) _ignored:test.keyword" ;
205- case CONSTANT_KEYWORD , MATCH_ONLY_TEXT_WITH_KEYWORD -> "*:*" ;
216+ case CONSTANT_KEYWORD , MATCH_ONLY_TEXT , MATCH_ONLY_TEXT_WITH_KEYWORD , TEXT -> "*:*" ;
206217 case KEYWORD -> "-test:%different_value #*:*" ;
207- case SEMANTIC_TEXT_WITH_KEYWORD -> "FieldExistsQuery [field=_primary_term]" ;
218+ case SEMANTIC_TEXT , SEMANTIC_TEXT_WITH_KEYWORD -> "FieldExistsQuery [field=_primary_term]" ;
208219 };
209220 ComputeSignature dataNodeSignature = switch (type ) {
210221 case CONSTANT_KEYWORD , KEYWORD -> ComputeSignature .FILTER_IN_QUERY ;
211- case AUTO , MATCH_ONLY_TEXT_WITH_KEYWORD , SEMANTIC_TEXT_WITH_KEYWORD , TEXT_WITH_KEYWORD -> ComputeSignature .FILTER_IN_COMPUTE ;
222+ case AUTO , MATCH_ONLY_TEXT , MATCH_ONLY_TEXT_WITH_KEYWORD , SEMANTIC_TEXT , SEMANTIC_TEXT_WITH_KEYWORD , TEXT , TEXT_WITH_KEYWORD ->
223+ ComputeSignature .FILTER_IN_COMPUTE ;
212224 };
213225 testPushQuery (value , esqlQuery , List .of (luceneQuery ), dataNodeSignature , true );
214226 }
@@ -220,12 +232,13 @@ public void testInequalityTooBigToPush() throws IOException {
220232 | WHERE test != "%value"
221233 """ ;
222234 String luceneQuery = switch (type ) {
223- case AUTO , CONSTANT_KEYWORD , MATCH_ONLY_TEXT_WITH_KEYWORD , TEXT_WITH_KEYWORD -> "*:*" ;
235+ case AUTO , CONSTANT_KEYWORD , MATCH_ONLY_TEXT , MATCH_ONLY_TEXT_WITH_KEYWORD , TEXT , TEXT_WITH_KEYWORD -> "*:*" ;
224236 case KEYWORD -> "-test:%value #single_value_match(test)" ;
225- case SEMANTIC_TEXT_WITH_KEYWORD -> "FieldExistsQuery [field=_primary_term]" ;
237+ case SEMANTIC_TEXT , SEMANTIC_TEXT_WITH_KEYWORD -> "FieldExistsQuery [field=_primary_term]" ;
226238 };
227239 ComputeSignature dataNodeSignature = switch (type ) {
228- case AUTO , MATCH_ONLY_TEXT_WITH_KEYWORD , SEMANTIC_TEXT_WITH_KEYWORD , TEXT_WITH_KEYWORD -> ComputeSignature .FILTER_IN_COMPUTE ;
240+ case AUTO , MATCH_ONLY_TEXT , MATCH_ONLY_TEXT_WITH_KEYWORD , SEMANTIC_TEXT , SEMANTIC_TEXT_WITH_KEYWORD , TEXT , TEXT_WITH_KEYWORD ->
241+ ComputeSignature .FILTER_IN_COMPUTE ;
229242 case CONSTANT_KEYWORD -> ComputeSignature .FIND_NONE ;
230243 case KEYWORD -> ComputeSignature .FILTER_IN_QUERY ;
231244 };
@@ -239,13 +252,14 @@ public void testCaseInsensitiveEquality() throws IOException {
239252 | WHERE TO_LOWER(test) == "%value"
240253 """ ;
241254 String luceneQuery = switch (type ) {
242- case AUTO , CONSTANT_KEYWORD , MATCH_ONLY_TEXT_WITH_KEYWORD , TEXT_WITH_KEYWORD -> "*:*" ;
255+ case AUTO , CONSTANT_KEYWORD , MATCH_ONLY_TEXT , MATCH_ONLY_TEXT_WITH_KEYWORD , TEXT , TEXT_WITH_KEYWORD -> "*:*" ;
243256 case KEYWORD -> "CaseInsensitiveTermQuery{test:%value}" ;
244- case SEMANTIC_TEXT_WITH_KEYWORD -> "FieldExistsQuery [field=_primary_term]" ;
257+ case SEMANTIC_TEXT , SEMANTIC_TEXT_WITH_KEYWORD -> "FieldExistsQuery [field=_primary_term]" ;
245258 };
246259 ComputeSignature dataNodeSignature = switch (type ) {
247260 case CONSTANT_KEYWORD , KEYWORD -> ComputeSignature .FILTER_IN_QUERY ;
248- case AUTO , MATCH_ONLY_TEXT_WITH_KEYWORD , SEMANTIC_TEXT_WITH_KEYWORD , TEXT_WITH_KEYWORD -> ComputeSignature .FILTER_IN_COMPUTE ;
261+ case AUTO , MATCH_ONLY_TEXT , MATCH_ONLY_TEXT_WITH_KEYWORD , SEMANTIC_TEXT , SEMANTIC_TEXT_WITH_KEYWORD , TEXT , TEXT_WITH_KEYWORD ->
262+ ComputeSignature .FILTER_IN_COMPUTE ;
249263 };
250264 testPushQuery (value , esqlQuery , List .of (luceneQuery ), dataNodeSignature , true );
251265 }
@@ -360,8 +374,9 @@ private void indexValue(String value) throws IOException {
360374 }""" ;
361375 json += switch (type ) {
362376 case AUTO -> "" ;
363- case CONSTANT_KEYWORD -> justType ();
377+ case CONSTANT_KEYWORD , MATCH_ONLY_TEXT , TEXT -> justType ();
364378 case KEYWORD -> keyword ();
379+ case SEMANTIC_TEXT -> justSemanticText ();
365380 case SEMANTIC_TEXT_WITH_KEYWORD -> semanticTextWithKeyword ();
366381 case TEXT_WITH_KEYWORD , MATCH_ONLY_TEXT_WITH_KEYWORD -> typeWithKeyword ();
367382 };
@@ -426,6 +441,19 @@ private String typeWithKeyword() {
426441 }""" .replace ("%type" , type .name ().replace ("_WITH_KEYWORD" , "" ).toLowerCase (Locale .ROOT ));
427442 }
428443
444+ private String justSemanticText () {
445+ return """
446+ ,
447+ "mappings": {
448+ "properties": {
449+ "test": {
450+ "type": "semantic_text",
451+ "inference_id": "test"
452+ }
453+ }
454+ }""" ;
455+ }
456+
429457 private String semanticTextWithKeyword () {
430458 return """
431459 ,
0 commit comments