Skip to content

Commit 84161fd

Browse files
Supply boosting to multi_match
1 parent e663f70 commit 84161fd

File tree

5 files changed

+56
-13
lines changed

5 files changed

+56
-13
lines changed

x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/queries/SemanticKnnVectorQueryRewriteInterceptor.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,7 @@ protected String getQuery(QueryBuilder queryBuilder) {
4747
return queryVectorBuilder != null ? queryVectorBuilder.getModelText() : null;
4848
}
4949

50-
@Override
51-
protected QueryBuilder buildInferenceQuery(QueryBuilder queryBuilder, InferenceIndexInformationForField indexInformation) {
50+
private QueryBuilder buildInferenceQuery(QueryBuilder queryBuilder, InferenceIndexInformationForField indexInformation) {
5251
assert (queryBuilder instanceof KnnVectorQueryBuilder);
5352
KnnVectorQueryBuilder knnVectorQueryBuilder = (KnnVectorQueryBuilder) queryBuilder;
5453
Map<String, List<String>> inferenceIdsIndices = indexInformation.getInferenceIdsIndices();
@@ -68,6 +67,17 @@ protected QueryBuilder buildInferenceQuery(QueryBuilder queryBuilder, InferenceI
6867
return finalQueryBuilder;
6968
}
7069

70+
@Override
71+
protected QueryBuilder buildInferenceQuery(QueryBuilder queryBuilder, InferenceIndexInformationForField indexInformation, Float fieldWeight) {
72+
QueryBuilder inferenceQuery = buildInferenceQuery(queryBuilder, indexInformation);
73+
74+
if (fieldWeight != null && fieldWeight.equals(1.0f) == false) {
75+
inferenceQuery.boost(fieldWeight);
76+
}
77+
78+
return inferenceQuery;
79+
}
80+
7181
private QueryBuilder buildInferenceQueryWithMultipleInferenceIds(
7282
KnnVectorQueryBuilder queryBuilder,
7383
Map<String, List<String>> inferenceIdsIndices

x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/queries/SemanticMatchQueryRewriteInterceptor.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,14 +36,24 @@ protected String getQuery(QueryBuilder queryBuilder) {
3636
return (String) matchQueryBuilder.value();
3737
}
3838

39-
@Override
40-
protected QueryBuilder buildInferenceQuery(QueryBuilder queryBuilder, InferenceIndexInformationForField indexInformation) {
39+
private QueryBuilder buildInferenceQuery(QueryBuilder queryBuilder, InferenceIndexInformationForField indexInformation) {
4140
SemanticQueryBuilder semanticQueryBuilder = new SemanticQueryBuilder(indexInformation.fieldName(), getQuery(queryBuilder), false);
4241
semanticQueryBuilder.boost(queryBuilder.boost());
4342
semanticQueryBuilder.queryName(queryBuilder.queryName());
4443
return semanticQueryBuilder;
4544
}
4645

46+
@Override
47+
protected QueryBuilder buildInferenceQuery(QueryBuilder queryBuilder, InferenceIndexInformationForField indexInformation, Float fieldWeight) {
48+
QueryBuilder inferenceQuery = buildInferenceQuery(queryBuilder, indexInformation);
49+
50+
if (fieldWeight != null && fieldWeight.equals(1.0f) == false) {
51+
inferenceQuery.boost(fieldWeight);
52+
}
53+
54+
return inferenceQuery;
55+
}
56+
4757
@Override
4858
protected QueryBuilder buildCombinedInferenceAndNonInferenceQuery(
4959
QueryBuilder queryBuilder,

x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/queries/SemanticMultiMatchQueryRewriteInterceptor.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,18 +28,28 @@ protected String getQuery(QueryBuilder queryBuilder) {
2828
return (String) multiMatchQueryBuilder.value();
2929
}
3030

31-
@Override
32-
protected QueryBuilder buildInferenceQuery(QueryBuilder queryBuilder, InferenceIndexInformationForField indexInformation) {
31+
private QueryBuilder buildInferenceQuery(QueryBuilder queryBuilder, InferenceIndexInformationForField indexInformation) {
3332
SemanticQueryBuilder semanticQueryBuilder = new SemanticQueryBuilder(
3433
indexInformation.fieldName(),
3534
getQuery(queryBuilder),
3635
false
3736
);
38-
// TODO:: add boost
37+
semanticQueryBuilder.boost(queryBuilder.boost());
3938
semanticQueryBuilder.queryName(queryBuilder.queryName());
4039
return semanticQueryBuilder;
4140
}
4241

42+
@Override
43+
protected QueryBuilder buildInferenceQuery(QueryBuilder queryBuilder, InferenceIndexInformationForField indexInformation, Float fieldWeight) {
44+
QueryBuilder inferenceQuery = buildInferenceQuery(queryBuilder, indexInformation);
45+
46+
if (fieldWeight != null && fieldWeight.equals(1.0f) == false) {
47+
inferenceQuery.boost(fieldWeight);
48+
}
49+
50+
return inferenceQuery;
51+
}
52+
4353
@Override
4454
protected QueryBuilder buildCombinedInferenceAndNonInferenceQuery(QueryBuilder queryBuilder, InferenceIndexInformationForField indexInformation) {
4555
assert (queryBuilder instanceof MultiMatchQueryBuilder);

x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/queries/SemanticQueryRewriteInterceptor.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,9 @@ public QueryBuilder interceptAndRewrite(QueryRewriteContext context, QueryBuilde
4242
}
4343

4444
BoolQueryBuilder finalQueryBuilder = new BoolQueryBuilder();
45-
for (String fieldName : fieldNamesWithWeights.keySet()) {
45+
for (Map.Entry<String, Float> fieldSet : fieldNamesWithWeights.entrySet()) {
46+
String fieldName = fieldSet.getKey();
47+
Float fieldWeight = fieldSet.getValue();
4648
InferenceIndexInformationForField indexInformation = resolveIndicesForField(fieldName, resolvedIndices);
4749
if (indexInformation.getInferenceIndices().isEmpty()) {
4850
// No inference fields were identified, so return the original query.
@@ -51,11 +53,11 @@ public QueryBuilder interceptAndRewrite(QueryRewriteContext context, QueryBuilde
5153
// Combined case where the field name requested by this query contains both
5254
// semantic_text and non-inference fields, so we have to combine queries per index
5355
// containing each field type.
54-
return finalQueryBuilder.should(buildCombinedInferenceAndNonInferenceQuery(queryBuilder, indexInformation));
56+
finalQueryBuilder.should(buildCombinedInferenceAndNonInferenceQuery(queryBuilder, indexInformation));
5557
} else {
5658
// The only fields we've identified are inference fields (e.g. semantic_text),
5759
// so rewrite the entire query to work on a semantic_text field.
58-
return finalQueryBuilder.should(buildInferenceQuery(queryBuilder, indexInformation));
60+
finalQueryBuilder.should(buildInferenceQuery(queryBuilder, indexInformation, fieldWeight));
5961
}
6062
}
6163
return finalQueryBuilder;
@@ -79,9 +81,10 @@ public QueryBuilder interceptAndRewrite(QueryRewriteContext context, QueryBuilde
7981
*
8082
* @param queryBuilder {@link QueryBuilder}
8183
* @param indexInformation {@link InferenceIndexInformationForField}
84+
* @param weight {@link Float}
8285
* @return {@link QueryBuilder}
8386
*/
84-
protected abstract QueryBuilder buildInferenceQuery(QueryBuilder queryBuilder, InferenceIndexInformationForField indexInformation);
87+
protected abstract QueryBuilder buildInferenceQuery(QueryBuilder queryBuilder, InferenceIndexInformationForField indexInformation, Float weight);
8588

8689
/**
8790
* Builds a combined inference and non-inference query,

x-pack/plugin/inference/src/main/java/org/elasticsearch/xpack/inference/queries/SemanticSparseVectorQueryRewriteInterceptor.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,7 @@ protected String getQuery(QueryBuilder queryBuilder) {
4040
return sparseVectorQueryBuilder.getQuery();
4141
}
4242

43-
@Override
44-
protected QueryBuilder buildInferenceQuery(QueryBuilder queryBuilder, InferenceIndexInformationForField indexInformation) {
43+
private QueryBuilder buildInferenceQuery(QueryBuilder queryBuilder, InferenceIndexInformationForField indexInformation) {
4544
Map<String, List<String>> inferenceIdsIndices = indexInformation.getInferenceIdsIndices();
4645
QueryBuilder finalQueryBuilder;
4746
if (inferenceIdsIndices.size() == 1) {
@@ -57,6 +56,17 @@ protected QueryBuilder buildInferenceQuery(QueryBuilder queryBuilder, InferenceI
5756
return finalQueryBuilder;
5857
}
5958

59+
@Override
60+
protected QueryBuilder buildInferenceQuery(QueryBuilder queryBuilder, InferenceIndexInformationForField indexInformation, Float fieldWeight) {
61+
QueryBuilder inferenceQuery = buildInferenceQuery(queryBuilder, indexInformation);
62+
63+
if (fieldWeight != null && fieldWeight.equals(1.0f) == false) {
64+
inferenceQuery.boost(fieldWeight);
65+
}
66+
67+
return inferenceQuery;
68+
}
69+
6070
private QueryBuilder buildInferenceQueryWithMultipleInferenceIds(
6171
QueryBuilder queryBuilder,
6272
Map<String, List<String>> inferenceIdsIndices

0 commit comments

Comments
 (0)