Skip to content

Commit 0a2bb77

Browse files
committed
Add integration tests
1 parent af11e3b commit 0a2bb77

File tree

1 file changed

+111
-1
lines changed
  • x-pack/plugin/esql/src/internalClusterTest/java/org/elasticsearch/xpack/esql/plugin

1 file changed

+111
-1
lines changed

x-pack/plugin/esql/src/internalClusterTest/java/org/elasticsearch/xpack/esql/plugin/ScoringIT.java

Lines changed: 111 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,14 @@
1616
import org.elasticsearch.xpack.esql.action.AbstractEsqlIntegTestCase;
1717
import org.junit.Before;
1818

19+
import java.util.HashMap;
1920
import java.util.List;
21+
import java.util.Map;
2022

2123
import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertAcked;
2224
import static org.hamcrest.CoreMatchers.containsString;
2325
import static org.hamcrest.Matchers.equalTo;
26+
import static org.hamcrest.Matchers.greaterThan;
2427

2528
//@TestLogging(value = "org.elasticsearch.xpack.esql:TRACE,org.elasticsearch.compute:TRACE", reason = "debug")
2629
public class ScoringIT extends AbstractEsqlIntegTestCase {
@@ -188,20 +191,127 @@ public void testMatchAllScoring() {
188191
FROM test
189192
METADATA _score
190193
| KEEP id, _score
194+
""";
195+
196+
assertZeroScore(query);
197+
}
198+
199+
public void testNonPushableFunctionsScoring() {
200+
var query = """
201+
FROM test
202+
METADATA _score
203+
| WHERE length(content) < 20
204+
| KEEP id, _score
205+
""";
206+
207+
assertZeroScore(query);
208+
209+
query = """
210+
FROM test
211+
METADATA _score
212+
| WHERE length(content) < 20 OR id > 4
213+
| KEEP id, _score
214+
""";
215+
216+
assertZeroScore(query);
217+
218+
query = """
219+
FROM test
220+
METADATA _score
221+
| WHERE length(content) < 20 AND id < 4
222+
| KEEP id, _score
223+
""";
224+
225+
assertZeroScore(query);
226+
}
227+
228+
public void testPushableFunctionsScoring() {
229+
var query = """
230+
FROM test
231+
METADATA _score
232+
| WHERE id > 4
233+
| KEEP id, _score
191234
| SORT id ASC
192235
""";
193236

237+
assertZeroScore(query);
238+
239+
query = """
240+
FROM test
241+
METADATA _score
242+
| WHERE id > 4 AND id < 7
243+
| KEEP id, _score
244+
| SORT id ASC
245+
""";
246+
247+
assertZeroScore(query);
248+
}
249+
250+
private void assertZeroScore(String query) {
194251
try (var resp = run(query)) {
195252
assertColumnNames(resp.columns(), List.of("id", "_score"));
196253
assertColumnTypes(resp.columns(), List.of("integer", "double"));
197254
List<List<Object>> values = EsqlTestUtils.getValuesList(resp.values());
198-
assertThat(values.size(), equalTo(6));
199255
for (List<Object> value : values) {
200256
assertThat((Double) value.get(1), equalTo(0.0));
201257
}
202258
}
203259
}
204260

261+
public void testPushableAndFullTextFunctionsConjunctionScoring() {
262+
var queryWithoutFilter = """
263+
FROM test
264+
METADATA _score
265+
| WHERE content:"fox"
266+
| KEEP id, _score
267+
| SORT id ASC
268+
""";
269+
var query = """
270+
FROM test
271+
METADATA _score
272+
| WHERE content:"fox" AND id > 4
273+
| KEEP id, _score
274+
| SORT id ASC
275+
""";
276+
checkSameScores(queryWithoutFilter, query);
277+
278+
query= """
279+
FROM test
280+
METADATA _score
281+
| WHERE content:"fox" AND (id > 4 or id < 2)
282+
| KEEP id, _score
283+
| SORT id ASC
284+
""";
285+
queryWithoutFilter = """
286+
FROM test
287+
METADATA _score
288+
| WHERE content:"fox"
289+
| KEEP id, _score
290+
| SORT id ASC
291+
""";
292+
checkSameScores(queryWithoutFilter, query);
293+
}
294+
295+
private void checkSameScores(String queryWithoutFilter, String query) {
296+
Map<Integer, Double> expectedScores = new HashMap<>();
297+
try (var respWithoutFilter = run(queryWithoutFilter)) {
298+
List<List<Object>> valuesList = EsqlTestUtils.getValuesList(respWithoutFilter);
299+
for (List<Object> result : valuesList) {
300+
expectedScores.put((Integer) result.get(0), (Double) result.get(1));
301+
}
302+
}
303+
try (var resp = run(query)) {
304+
assertColumnNames(resp.columns(), List.of("id", "_score"));
305+
assertColumnTypes(resp.columns(), List.of("integer", "double"));
306+
List<List<Object>> values = EsqlTestUtils.getValuesList(resp.values());
307+
for (List<Object> value : values) {
308+
Double score = (Double) value.get(1);
309+
assertThat(score, greaterThan(0.0));
310+
assertThat(expectedScores.get((Integer)value.get(0)), equalTo(score));
311+
}
312+
}
313+
}
314+
205315
private void createAndPopulateIndex() {
206316
var indexName = "test";
207317
var client = client().admin().indices();

0 commit comments

Comments
 (0)