|
@@ -69,6 +69,7 @@ import java.util.Optional;
|
|
|
import java.util.Set;
|
|
|
import java.util.function.Function;
|
|
|
|
|
|
+import static org.elasticsearch.search.SearchService.DEFAULT_SIZE;
|
|
|
import static org.elasticsearch.xpack.inference.mapper.SemanticTextField.CHUNKED_EMBEDDINGS_FIELD;
|
|
|
import static org.elasticsearch.xpack.inference.mapper.SemanticTextField.CHUNKED_TEXT_FIELD;
|
|
|
import static org.elasticsearch.xpack.inference.mapper.SemanticTextField.CHUNKS_FIELD;
|
|
@@ -91,6 +92,7 @@ public class SemanticTextFieldMapper extends FieldMapper implements InferenceFie
|
|
|
public static final NodeFeature SEMANTIC_TEXT_IN_OBJECT_FIELD_FIX = new NodeFeature("semantic_text.in_object_field_fix");
|
|
|
public static final NodeFeature SEMANTIC_TEXT_SINGLE_FIELD_UPDATE_FIX = new NodeFeature("semantic_text.single_field_update_fix");
|
|
|
public static final NodeFeature SEMANTIC_TEXT_DELETE_FIX = new NodeFeature("semantic_text.delete_fix");
|
|
|
+ public static final NodeFeature SEMANTIC_TEXT_ZERO_SIZE_FIX = new NodeFeature("semantic_text.zero_size_fix");
|
|
|
|
|
|
public static final String CONTENT_TYPE = "semantic_text";
|
|
|
public static final String DEFAULT_ELSER_2_INFERENCE_ID = DEFAULT_ELSER_ID;
|
|
@@ -507,7 +509,7 @@ public class SemanticTextFieldMapper extends FieldMapper implements InferenceFie
|
|
|
return fieldInfos.fieldInfo(getEmbeddingsFieldName(name())) != null;
|
|
|
}
|
|
|
|
|
|
- public QueryBuilder semanticQuery(InferenceResults inferenceResults, float boost, String queryName) {
|
|
|
+ public QueryBuilder semanticQuery(InferenceResults inferenceResults, Integer requestSize, float boost, String queryName) {
|
|
|
String nestedFieldPath = getChunksFieldName(name());
|
|
|
String inferenceResultsFieldName = getEmbeddingsFieldName(name());
|
|
|
QueryBuilder childQueryBuilder;
|
|
@@ -551,7 +553,13 @@ public class SemanticTextFieldMapper extends FieldMapper implements InferenceFie
|
|
|
);
|
|
|
}
|
|
|
|
|
|
- yield new KnnVectorQueryBuilder(inferenceResultsFieldName, inference, null, null, null);
|
|
|
+ Integer k = requestSize;
|
|
|
+ if (k != null) {
|
|
|
+ // Ensure that k is at least the default size so that aggregations work when size is set to 0 in the request
|
|
|
+ k = Math.max(k, DEFAULT_SIZE);
|
|
|
+ }
|
|
|
+
|
|
|
+ yield new KnnVectorQueryBuilder(inferenceResultsFieldName, inference, k, null, null);
|
|
|
}
|
|
|
default -> throw new IllegalStateException(
|
|
|
"Field ["
|