Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 0 additions & 5 deletions docs/changelog/111834.yaml

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
import org.elasticsearch.features.FeatureSpecification;
import org.elasticsearch.features.NodeFeature;
import org.elasticsearch.xpack.inference.mapper.SemanticTextFieldMapper;
import org.elasticsearch.xpack.inference.queries.SemanticQueryBuilder;
import org.elasticsearch.xpack.inference.rank.random.RandomRankRetrieverBuilder;
import org.elasticsearch.xpack.inference.rank.textsimilarity.TextSimilarityRankRetrieverBuilder;

Expand All @@ -26,8 +25,7 @@ public Set<NodeFeature> getFeatures() {
return Set.of(
TextSimilarityRankRetrieverBuilder.TEXT_SIMILARITY_RERANKER_RETRIEVER_SUPPORTED,
RandomRankRetrieverBuilder.RANDOM_RERANKER_RETRIEVER_SUPPORTED,
SemanticTextFieldMapper.SEMANTIC_TEXT_SEARCH_INFERENCE_ID,
SemanticQueryBuilder.SEMANTIC_TEXT_INNER_HITS
SemanticTextFieldMapper.SEMANTIC_TEXT_SEARCH_INFERENCE_ID
);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@
import org.elasticsearch.index.mapper.ValueFetcher;
import org.elasticsearch.index.mapper.vectors.DenseVectorFieldMapper;
import org.elasticsearch.index.mapper.vectors.SparseVectorFieldMapper;
import org.elasticsearch.index.query.InnerHitBuilder;
import org.elasticsearch.index.query.MatchNoneQueryBuilder;
import org.elasticsearch.index.query.NestedQueryBuilder;
import org.elasticsearch.index.query.QueryBuilder;
Expand All @@ -55,7 +54,6 @@
import org.elasticsearch.xcontent.XContentParserConfiguration;
import org.elasticsearch.xpack.core.ml.inference.results.MlTextEmbeddingResults;
import org.elasticsearch.xpack.core.ml.inference.results.TextExpansionResults;
import org.elasticsearch.xpack.inference.queries.SemanticQueryInnerHitBuilder;

import java.io.IOException;
import java.util.ArrayList;
Expand Down Expand Up @@ -470,12 +468,7 @@ public boolean fieldHasValue(FieldInfos fieldInfos) {
return fieldInfos.fieldInfo(getEmbeddingsFieldName(name())) != null;
}

public QueryBuilder semanticQuery(
InferenceResults inferenceResults,
float boost,
String queryName,
SemanticQueryInnerHitBuilder semanticInnerHitBuilder
) {
public QueryBuilder semanticQuery(InferenceResults inferenceResults, float boost, String queryName) {
String nestedFieldPath = getChunksFieldName(name());
String inferenceResultsFieldName = getEmbeddingsFieldName(name());
QueryBuilder childQueryBuilder;
Expand Down Expand Up @@ -531,10 +524,7 @@ public QueryBuilder semanticQuery(
};
}

InnerHitBuilder innerHitBuilder = semanticInnerHitBuilder != null ? semanticInnerHitBuilder.toInnerHitBuilder() : null;
return new NestedQueryBuilder(nestedFieldPath, childQueryBuilder, ScoreMode.Max).boost(boost)
.queryName(queryName)
.innerHit(innerHitBuilder);
return new NestedQueryBuilder(nestedFieldPath, childQueryBuilder, ScoreMode.Max).boost(boost).queryName(queryName);
}

private String generateQueryInferenceResultsTypeMismatchMessage(InferenceResults inferenceResults, String expectedResultsType) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,6 @@
import org.elasticsearch.cluster.metadata.InferenceFieldMetadata;
import org.elasticsearch.common.io.stream.StreamInput;
import org.elasticsearch.common.io.stream.StreamOutput;
import org.elasticsearch.core.Nullable;
import org.elasticsearch.features.NodeFeature;
import org.elasticsearch.index.mapper.MappedFieldType;
import org.elasticsearch.index.query.AbstractQueryBuilder;
import org.elasticsearch.index.query.MatchNoneQueryBuilder;
Expand Down Expand Up @@ -46,46 +44,35 @@
import java.util.Map;
import java.util.Objects;

import static org.elasticsearch.TransportVersions.SEMANTIC_QUERY_INNER_HITS;
import static org.elasticsearch.xcontent.ConstructingObjectParser.constructorArg;
import static org.elasticsearch.xcontent.ConstructingObjectParser.optionalConstructorArg;
import static org.elasticsearch.xpack.core.ClientHelper.ML_ORIGIN;
import static org.elasticsearch.xpack.core.ClientHelper.executeAsyncWithOrigin;

public class SemanticQueryBuilder extends AbstractQueryBuilder<SemanticQueryBuilder> {
public static final NodeFeature SEMANTIC_TEXT_INNER_HITS = new NodeFeature("semantic_text.inner_hits");

public static final String NAME = "semantic";

private static final ParseField FIELD_FIELD = new ParseField("field");
private static final ParseField QUERY_FIELD = new ParseField("query");
private static final ParseField INNER_HITS_FIELD = new ParseField("inner_hits");

private static final ConstructingObjectParser<SemanticQueryBuilder, Void> PARSER = new ConstructingObjectParser<>(
NAME,
false,
args -> new SemanticQueryBuilder((String) args[0], (String) args[1], (SemanticQueryInnerHitBuilder) args[2])
args -> new SemanticQueryBuilder((String) args[0], (String) args[1])
);

static {
PARSER.declareString(constructorArg(), FIELD_FIELD);
PARSER.declareString(constructorArg(), QUERY_FIELD);
PARSER.declareObject(optionalConstructorArg(), (p, c) -> SemanticQueryInnerHitBuilder.fromXContent(p), INNER_HITS_FIELD);
declareStandardFields(PARSER);
}

private final String fieldName;
private final String query;
private final SemanticQueryInnerHitBuilder innerHitBuilder;
private final SetOnce<InferenceServiceResults> inferenceResultsSupplier;
private final InferenceResults inferenceResults;
private final boolean noInferenceResults;

public SemanticQueryBuilder(String fieldName, String query) {
this(fieldName, query, null);
}

public SemanticQueryBuilder(String fieldName, String query, @Nullable SemanticQueryInnerHitBuilder innerHitBuilder) {
if (fieldName == null) {
throw new IllegalArgumentException("[" + NAME + "] requires a " + FIELD_FIELD.getPreferredName() + " value");
}
Expand All @@ -94,25 +81,15 @@ public SemanticQueryBuilder(String fieldName, String query, @Nullable SemanticQu
}
this.fieldName = fieldName;
this.query = query;
this.innerHitBuilder = innerHitBuilder;
this.inferenceResults = null;
this.inferenceResultsSupplier = null;
this.noInferenceResults = false;

if (this.innerHitBuilder != null) {
this.innerHitBuilder.setFieldName(fieldName);
}
}

public SemanticQueryBuilder(StreamInput in) throws IOException {
super(in);
this.fieldName = in.readString();
this.query = in.readString();
if (in.getTransportVersion().onOrAfter(SEMANTIC_QUERY_INNER_HITS)) {
this.innerHitBuilder = in.readOptionalWriteable(SemanticQueryInnerHitBuilder::new);
} else {
this.innerHitBuilder = null;
}
this.inferenceResults = in.readOptionalNamedWriteable(InferenceResults.class);
this.noInferenceResults = in.readBoolean();
this.inferenceResultsSupplier = null;
Expand All @@ -125,21 +102,6 @@ protected void doWriteTo(StreamOutput out) throws IOException {
}
out.writeString(fieldName);
out.writeString(query);
if (out.getTransportVersion().onOrAfter(SEMANTIC_QUERY_INNER_HITS)) {
out.writeOptionalWriteable(innerHitBuilder);
} else if (innerHitBuilder != null) {
throw new IllegalStateException(
"Transport version must be at least ["
+ SEMANTIC_QUERY_INNER_HITS.toReleaseVersion()
+ "] to use [ "
+ INNER_HITS_FIELD.getPreferredName()
+ "] in ["
+ NAME
+ "], current transport version is ["
+ out.getTransportVersion().toReleaseVersion()
+ "]. Are you running a mixed-version cluster?"
);
}
out.writeOptionalNamedWriteable(inferenceResults);
out.writeBoolean(noInferenceResults);
}
Expand All @@ -152,18 +114,13 @@ private SemanticQueryBuilder(
) {
this.fieldName = other.fieldName;
this.query = other.query;
this.innerHitBuilder = other.innerHitBuilder;
this.boost = other.boost;
this.queryName = other.queryName;
this.inferenceResultsSupplier = inferenceResultsSupplier;
this.inferenceResults = inferenceResults;
this.noInferenceResults = noInferenceResults;
}

public SemanticQueryInnerHitBuilder innerHit() {
return innerHitBuilder;
}

@Override
public String getWriteableName() {
return NAME;
Expand All @@ -183,9 +140,6 @@ protected void doXContent(XContentBuilder builder, Params params) throws IOExcep
builder.startObject(NAME);
builder.field(FIELD_FIELD.getPreferredName(), fieldName);
builder.field(QUERY_FIELD.getPreferredName(), query);
if (innerHitBuilder != null) {
builder.field(INNER_HITS_FIELD.getPreferredName(), innerHitBuilder);
}
boostAndQueryNameToXContent(builder);
builder.endObject();
}
Expand All @@ -212,7 +166,7 @@ private QueryBuilder doRewriteBuildSemanticQuery(SearchExecutionContext searchEx
);
}

return semanticTextFieldType.semanticQuery(inferenceResults, boost(), queryName(), innerHitBuilder);
return semanticTextFieldType.semanticQuery(inferenceResults, boost(), queryName());
} else {
throw new IllegalArgumentException(
"Field [" + fieldName + "] of type [" + fieldType.typeName() + "] does not support " + NAME + " queries"
Expand Down Expand Up @@ -347,12 +301,11 @@ private static String getInferenceIdForForField(Collection<IndexMetadata> indexM
protected boolean doEquals(SemanticQueryBuilder other) {
return Objects.equals(fieldName, other.fieldName)
&& Objects.equals(query, other.query)
&& Objects.equals(innerHitBuilder, other.innerHitBuilder)
&& Objects.equals(inferenceResults, other.inferenceResults);
}

@Override
protected int doHashCode() {
return Objects.hash(fieldName, query, innerHitBuilder, inferenceResults);
return Objects.hash(fieldName, query, inferenceResults);
}
}

This file was deleted.

Loading