Skip to content

Commit a1d3ef3

Browse files
adding multimatch intercepter class
1 parent c051884 commit a1d3ef3

File tree

3 files changed

+69
-1
lines changed

3 files changed

+69
-1
lines changed

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@
9595
import org.elasticsearch.xpack.inference.mapper.SemanticTextFieldMapper;
9696
import org.elasticsearch.xpack.inference.queries.SemanticKnnVectorQueryRewriteInterceptor;
9797
import org.elasticsearch.xpack.inference.queries.SemanticMatchQueryRewriteInterceptor;
98+
import org.elasticsearch.xpack.inference.queries.SemanticMultiMatchQueryRewriteInterceptor;
9899
import org.elasticsearch.xpack.inference.queries.SemanticQueryBuilder;
99100
import org.elasticsearch.xpack.inference.queries.SemanticSparseVectorQueryRewriteInterceptor;
100101
import org.elasticsearch.xpack.inference.rank.random.RandomRankBuilder;
@@ -569,7 +570,8 @@ public List<QueryRewriteInterceptor> getQueryRewriteInterceptors() {
569570
return List.of(
570571
new SemanticKnnVectorQueryRewriteInterceptor(),
571572
new SemanticMatchQueryRewriteInterceptor(),
572-
new SemanticSparseVectorQueryRewriteInterceptor()
573+
new SemanticSparseVectorQueryRewriteInterceptor(),
574+
new SemanticMultiMatchQueryRewriteInterceptor()
573575
);
574576
}
575577

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
/*
2+
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3+
* or more contributor license agreements. Licensed under the Elastic License
4+
* 2.0; you may not use this file except in compliance with the Elastic License
5+
* 2.0.
6+
*/
7+
8+
package org.elasticsearch.xpack.inference.queries;
9+
10+
import org.elasticsearch.index.query.MultiMatchQueryBuilder;
11+
import org.elasticsearch.index.query.QueryBuilder;
12+
13+
import java.util.Map;
14+
15+
public class SemanticMultiMatchQueryRewriteInterceptor extends SemanticQueryRewriteInterceptor {
16+
@Override
17+
protected Map<String, Float> getFieldNamesWithBoosts(QueryBuilder queryBuilder) {
18+
assert (queryBuilder instanceof MultiMatchQueryBuilder);
19+
MultiMatchQueryBuilder multiMatchQueryBuilder = (MultiMatchQueryBuilder) queryBuilder;
20+
return multiMatchQueryBuilder.fields();
21+
}
22+
23+
@Override
24+
protected String getQuery(QueryBuilder queryBuilder) {
25+
assert (queryBuilder instanceof MultiMatchQueryBuilder);
26+
MultiMatchQueryBuilder multiMatchQueryBuilder = (MultiMatchQueryBuilder) queryBuilder;
27+
return (String) multiMatchQueryBuilder.value();
28+
}
29+
30+
@Override
31+
protected QueryBuilder buildInferenceQuery(
32+
QueryBuilder queryBuilder,
33+
InferenceIndexInformationForField indexInformation,
34+
Float fieldBoost
35+
) {
36+
return queryBuilder;
37+
}
38+
39+
@Override
40+
protected QueryBuilder buildCombinedInferenceAndNonInferenceQuery(
41+
QueryBuilder queryBuilder,
42+
InferenceIndexInformationForField indexInformation,
43+
Float fieldBoost
44+
) {
45+
return queryBuilder;
46+
}
47+
48+
@Override
49+
public String getQueryName() {
50+
return MultiMatchQueryBuilder.NAME;
51+
}
52+
}

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import org.elasticsearch.cluster.metadata.InferenceFieldMetadata;
1313
import org.elasticsearch.index.mapper.IndexFieldMapper;
1414
import org.elasticsearch.index.query.BoolQueryBuilder;
15+
import org.elasticsearch.index.query.MultiMatchQueryBuilder;
1516
import org.elasticsearch.index.query.QueryBuilder;
1617
import org.elasticsearch.index.query.QueryRewriteContext;
1718
import org.elasticsearch.index.query.TermsQueryBuilder;
@@ -41,6 +42,12 @@ public QueryBuilder interceptAndRewrite(QueryRewriteContext context, QueryBuilde
4142
return queryBuilder;
4243
}
4344

45+
if (queryBuilder instanceof MultiMatchQueryBuilder) {
46+
// This is a placeholder for the actual multi-field handling logic.
47+
// Going forward, we will also send fieldNamesWithWeights and resolvedIndices
48+
return handleMultiFieldQuery(queryBuilder);
49+
}
50+
4451
String fieldName = fieldsWithBoosts.keySet().iterator().next();
4552
Float fieldBoost = fieldsWithBoosts.get(fieldName);
4653

@@ -60,6 +67,13 @@ public QueryBuilder interceptAndRewrite(QueryRewriteContext context, QueryBuilde
6067
}
6168
}
6269

70+
/**
71+
* Handle multi-field queries
72+
*/
73+
private QueryBuilder handleMultiFieldQuery(QueryBuilder queryBuilder) {
74+
return queryBuilder;
75+
}
76+
6377
/**
6478
* Extracts field names and their associated boost values from the query builder.
6579
*

0 commit comments

Comments
 (0)