Skip to content

Commit 1dd6d96

Browse files
committed
Tests
1 parent 6b0fead commit 1dd6d96

File tree

5 files changed

+21
-11
lines changed

5 files changed

+21
-11
lines changed

server/src/main/java/org/elasticsearch/index/mapper/KeywordFieldMapper.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -829,6 +829,9 @@ public BlockLoader blockLoader(BlockLoaderContext blContext) {
829829
if (blContext.blockLoaderFunctionConfig() != null) {
830830
throw new UnsupportedOperationException("function fusing only supported for doc values");
831831
}
832+
if (isStored()) {
833+
return new BlockStoredFieldsReader.BytesFromBytesRefsBlockLoader(name());
834+
}
832835

833836
// Multi fields don't have fallback synthetic source.
834837
if (isSyntheticSourceEnabled() && blContext.parentField(name()) == null) {

x-pack/plugin/esql-core/src/main/java/org/elasticsearch/xpack/esql/core/type/EsField.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,13 @@ public EsField getExactField() {
252252
return this;
253253
}
254254

255+
/**
256+
* Can this field be pushed <strong>if</strong> it is indexed?
257+
*/
258+
public boolean pushable() {
259+
return true;
260+
}
261+
255262
/**
256263
* Returns and {@link Exact} object with all the necessary info about the field:
257264
* <ul>

x-pack/plugin/esql-core/src/main/java/org/elasticsearch/xpack/esql/core/type/FunctionEsField.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,4 +70,10 @@ public boolean equals(Object o) {
7070
public int hashCode() {
7171
return Objects.hash(super.hashCode(), functionConfig);
7272
}
73+
74+
@Override
75+
public boolean pushable() {
76+
// These fields are *never* pushable to the lucene index.
77+
return false;
78+
}
7379
}

x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/optimizer/rules/physical/local/LucenePushdownPredicates.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import org.elasticsearch.xpack.esql.core.expression.MetadataAttribute;
1616
import org.elasticsearch.xpack.esql.core.expression.TypedAttribute;
1717
import org.elasticsearch.xpack.esql.core.type.DataType;
18+
import org.elasticsearch.xpack.esql.core.type.FunctionEsField;
1819
import org.elasticsearch.xpack.esql.core.util.Check;
1920
import org.elasticsearch.xpack.esql.plugin.EsqlFlags;
2021
import org.elasticsearch.xpack.esql.stats.SearchStats;
@@ -194,6 +195,9 @@ public boolean isIndexedAndHasDocValues(FieldAttribute attr) {
194195
// We still consider the value of isAggregatable here, because some fields like ScriptFieldTypes are always aggregatable
195196
// But this could hide issues with fields that are not indexed but are aggregatable
196197
// This is the original behaviour for ES|QL, but is it correct?
198+
if (attr.field().pushable() == false) {
199+
return false;
200+
}
197201
return attr.field().isAggregatable()
198202
|| stats.isIndexed(new FieldAttribute.FieldName(attr.name()))
199203
&& stats.hasDocValues(new FieldAttribute.FieldName(attr.name()));

x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/optimizer/LocalLogicalPlanOptimizerTests.java

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1129,7 +1129,6 @@ public void testVectorFunctionsReplaced() {
11291129
// Check replaced field attribute
11301130
FieldAttribute fieldAttr = (FieldAttribute) alias.child();
11311131
assertThat(fieldAttr.fieldName().string(), equalTo("dense_vector"));
1132-
assertThat(fieldAttr.name(), startsWith("$$dense_vector$DotProduct"));
11331132
var field = as(fieldAttr.field(), FunctionEsField.class);
11341133
var blockLoaderFunctionConfig = as(field.functionConfig(), DenseVectorFieldMapper.VectorSimilarityFunctionConfig.class);
11351134
assertThat(blockLoaderFunctionConfig.similarityFunction(), is(DotProduct.SIMILARITY_FUNCTION));
@@ -1185,7 +1184,6 @@ public void testVectorFunctionsReplacedWithTopN() {
11851184
// Check replaced field attribute
11861185
FieldAttribute fieldAttr = (FieldAttribute) alias.child();
11871186
assertThat(fieldAttr.fieldName().string(), equalTo("dense_vector"));
1188-
assertThat(fieldAttr.name(), startsWith("$$dense_vector$DotProduct"));
11891187
var field = as(fieldAttr.field(), FunctionEsField.class);
11901188
var blockLoaderFunctionConfig = as(field.functionConfig(), DenseVectorFieldMapper.VectorSimilarityFunctionConfig.class);
11911189
assertThat(blockLoaderFunctionConfig.similarityFunction(), is(DotProduct.SIMILARITY_FUNCTION));
@@ -1300,7 +1298,6 @@ public void testVectorFunctionsInWhere() {
13001298
// Check left side is the replaced field attribute
13011299
var fieldAttr = as(greaterThan.left(), FieldAttribute.class);
13021300
assertThat(fieldAttr.fieldName().string(), equalTo("dense_vector"));
1303-
assertThat(fieldAttr.name(), startsWith("$$dense_vector$DotProduct"));
13041301
var field = as(fieldAttr.field(), FunctionEsField.class);
13051302
var blockLoaderFunctionConfig = as(field.functionConfig(), DenseVectorFieldMapper.VectorSimilarityFunctionConfig.class);
13061303
assertThat(blockLoaderFunctionConfig.similarityFunction(), is(DotProduct.SIMILARITY_FUNCTION));
@@ -1349,7 +1346,6 @@ public void testVectorFunctionsInStats() {
13491346
// Check left side is the replaced field attribute
13501347
var fieldAttr = as(filterCondition.left(), FieldAttribute.class);
13511348
assertThat(fieldAttr.fieldName().string(), equalTo("dense_vector"));
1352-
assertThat(fieldAttr.name(), startsWith("$$dense_vector$DotProduct"));
13531349
var field = as(fieldAttr.field(), FunctionEsField.class);
13541350
var blockLoaderFunctionConfig = as(field.functionConfig(), DenseVectorFieldMapper.VectorSimilarityFunctionConfig.class);
13551351
assertThat(blockLoaderFunctionConfig.similarityFunction(), is(DotProduct.SIMILARITY_FUNCTION));
@@ -1392,7 +1388,6 @@ public void testVectorFunctionsUpdateIntermediateProjections() {
13921388
// Check replaced field attribute
13931389
var fieldAttr = as(alias.child(), FieldAttribute.class);
13941390
assertThat(fieldAttr.fieldName().string(), equalTo("dense_vector"));
1395-
assertThat(fieldAttr.name(), startsWith("$$dense_vector$CosineSimilarity"));
13961391
var field = as(fieldAttr.field(), FunctionEsField.class);
13971392
var blockLoaderFunctionConfig = as(field.functionConfig(), DenseVectorFieldMapper.VectorSimilarityFunctionConfig.class);
13981393
assertThat(blockLoaderFunctionConfig.similarityFunction(), is(CosineSimilarity.SIMILARITY_FUNCTION));
@@ -1406,9 +1401,7 @@ public void testVectorFunctionsUpdateIntermediateProjections() {
14061401
var innerProject = as(mvExpand.child(), EsqlProject.class);
14071402
assertTrue(Expressions.names(innerProject.projections()).contains("keyword"));
14081403
assertTrue(
1409-
innerProject.projections()
1410-
.stream()
1411-
.anyMatch(p -> (p instanceof FieldAttribute fa) && fa.name().startsWith("$$dense_vector$CosineSimilarity"))
1404+
innerProject.projections().stream().anyMatch(p -> (p instanceof FieldAttribute fa) && fa.name().startsWith("$$dense_vector$"))
14121405
);
14131406

14141407
// EsRelation[test_all][$$dense_vector$CosineSimilarity$33{f}#33, !alias_in..]
@@ -1441,7 +1434,6 @@ public void testVectorFunctionsWithDuplicateFunctions() {
14411434
assertThat(s1Alias.name(), equalTo("s1"));
14421435
var s1FieldAttr = as(s1Alias.child(), FieldAttribute.class);
14431436
assertThat(s1FieldAttr.fieldName().string(), equalTo("dense_vector"));
1444-
assertThat(s1FieldAttr.name(), startsWith("$$dense_vector$DotProduct"));
14451437
var s1Field = as(s1FieldAttr.field(), FunctionEsField.class);
14461438
var s1Config = as(s1Field.functionConfig(), DenseVectorFieldMapper.VectorSimilarityFunctionConfig.class);
14471439
assertThat(s1Config.similarityFunction(), is(DotProduct.SIMILARITY_FUNCTION));
@@ -1460,7 +1452,6 @@ public void testVectorFunctionsWithDuplicateFunctions() {
14601452
assertThat(r1Alias.name(), equalTo("r1"));
14611453
var r1FieldAttr = as(r1Alias.child(), FieldAttribute.class);
14621454
assertThat(r1FieldAttr.fieldName().string(), equalTo("dense_vector"));
1463-
assertThat(r1FieldAttr.name(), startsWith("$$dense_vector$DotProduct"));
14641455
var r1Field = as(r1FieldAttr.field(), FunctionEsField.class);
14651456
var r1Config = as(r1Field.functionConfig(), DenseVectorFieldMapper.VectorSimilarityFunctionConfig.class);
14661457
assertThat(r1Config.similarityFunction(), is(DotProduct.SIMILARITY_FUNCTION));
@@ -1478,7 +1469,6 @@ public void testVectorFunctionsWithDuplicateFunctions() {
14781469
// Right side: CosineSimilarity field
14791470
var r2CosineFieldAttr = as(r2Add.right(), FieldAttribute.class);
14801471
assertThat(r2CosineFieldAttr.fieldName().string(), equalTo("dense_vector"));
1481-
assertThat(r2CosineFieldAttr.name(), startsWith("$$dense_vector$CosineSimilarity"));
14821472
var r2CosineField = as(r2CosineFieldAttr.field(), FunctionEsField.class);
14831473
var r2CosineConfig = as(r2CosineField.functionConfig(), DenseVectorFieldMapper.VectorSimilarityFunctionConfig.class);
14841474
assertThat(r2CosineConfig.similarityFunction(), is(CosineSimilarity.SIMILARITY_FUNCTION));

0 commit comments

Comments
 (0)