88package org .elasticsearch .xpack .inference .queries ;
99
1010import org .elasticsearch .index .query .BoolQueryBuilder ;
11- import org .elasticsearch .index .query .MatchQueryBuilder ;
1211import org .elasticsearch .index .query .MultiMatchQueryBuilder ;
1312import org .elasticsearch .index .query .QueryBuilder ;
1413
1514import java .util .Map ;
1615
1716public class SemanticMultiMatchQueryRewriteInterceptor extends SemanticQueryRewriteInterceptor {
1817 @ Override
19- protected Map <String , Float > getFieldNamesWithWeights (QueryBuilder queryBuilder ) {
18+ protected Map <String , Float > getFieldNamesWithBoosts (QueryBuilder queryBuilder ) {
2019 assert (queryBuilder instanceof MultiMatchQueryBuilder );
2120 MultiMatchQueryBuilder multiMatchQueryBuilder = (MultiMatchQueryBuilder ) queryBuilder ;
2221 return multiMatchQueryBuilder .fields ();
@@ -29,61 +28,23 @@ protected String getQuery(QueryBuilder queryBuilder) {
2928 return (String ) multiMatchQueryBuilder .value ();
3029 }
3130
32- private QueryBuilder buildInferenceQuery (QueryBuilder queryBuilder , InferenceIndexInformationForField indexInformation ) {
33- SemanticQueryBuilder semanticQueryBuilder = new SemanticQueryBuilder (indexInformation .fieldName (), getQuery (queryBuilder ), false );
34- semanticQueryBuilder .boost (queryBuilder .boost ());
35- semanticQueryBuilder .queryName (queryBuilder .queryName ());
36- return semanticQueryBuilder ;
37- }
38-
3931 @ Override
4032 protected QueryBuilder buildInferenceQuery (
4133 QueryBuilder queryBuilder ,
4234 InferenceIndexInformationForField indexInformation ,
43- Float fieldWeight
35+ Float fieldWBoost
4436 ) {
45- QueryBuilder inferenceQuery = buildInferenceQuery (queryBuilder , indexInformation );
46-
47- if (fieldWeight != null && fieldWeight .equals (1.0f ) == false ) {
48- inferenceQuery .boost (fieldWeight );
49- }
50-
51- return inferenceQuery ;
52- }
53-
54- private QueryBuilder buildCombinedInferenceAndNonInferenceQuery (
55- QueryBuilder queryBuilder ,
56- InferenceIndexInformationForField indexInformation
57- ) {
58- assert (queryBuilder instanceof MultiMatchQueryBuilder );
59- MultiMatchQueryBuilder originalMultiMatchQueryBuilder = (MultiMatchQueryBuilder ) queryBuilder ;
60-
61- // Create a copy for non-inference fields with only this specific field
62- MultiMatchQueryBuilder multiMatchQueryBuilder = createSingleFieldMultiMatch (
63- originalMultiMatchQueryBuilder ,
64- indexInformation .fieldName ()
65- );
66-
67- BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder ();
68-
69- // Add semantic query for inference indices
70- boolQueryBuilder .should (
71- createSemanticSubQuery (indexInformation .getInferenceIndices (), indexInformation .fieldName (), getQuery (queryBuilder ))
72- );
73-
74- // Add regular query for non-inference indices
75- boolQueryBuilder .should (createSubQueryForIndices (indexInformation .nonInferenceIndices (), multiMatchQueryBuilder ));
76-
77- // TODO:: add boost
78- boolQueryBuilder .queryName (queryBuilder .queryName ());
79- return boolQueryBuilder ;
37+ SemanticQueryBuilder semanticQueryBuilder = new SemanticQueryBuilder (indexInformation .fieldName (), getQuery (queryBuilder ), false );
38+ semanticQueryBuilder .boost (queryBuilder .boost () * fieldWBoost );
39+ semanticQueryBuilder .queryName (queryBuilder .queryName ());
40+ return semanticQueryBuilder ;
8041 }
8142
8243 @ Override
8344 protected QueryBuilder buildCombinedInferenceAndNonInferenceQuery (
8445 QueryBuilder queryBuilder ,
8546 InferenceIndexInformationForField indexInformation ,
86- Float fieldWeight
47+ Float fieldBoost
8748 ) {
8849 assert (queryBuilder instanceof MultiMatchQueryBuilder );
8950 MultiMatchQueryBuilder multiMatchQueryBuilder = (MultiMatchQueryBuilder ) queryBuilder ;
@@ -101,20 +62,7 @@ protected QueryBuilder buildCombinedInferenceAndNonInferenceQuery(
10162 )
10263 );
10364
104-
105- QueryBuilder nonSemanticFieldQuery = buildNonSemanticFieldQuery (
106- queryBuilder ,
107- indexInformation .fieldName (),
108- fieldWeight
109- );
110- // boolQueryBuilder.should(
111- // createSubQueryForIndices(indexInformation.nonInferenceIndices(), nonSemanticFieldQuery)
112- // );
113- // boolQueryBuilder.should(createSubQueryForIndices(indexInformation.nonInferenceIndices(), multiMatchQueryBuilder));
114-
115- if (fieldWeight != null && fieldWeight .equals (1.0f ) == false ) {
116- boolQueryBuilder .boost (fieldWeight );
117- }
65+ boolQueryBuilder .boost (queryBuilder .boost () * fieldBoost );
11866 boolQueryBuilder .queryName (queryBuilder .queryName ());
11967 return boolQueryBuilder ;
12068 }
@@ -123,31 +71,4 @@ protected QueryBuilder buildCombinedInferenceAndNonInferenceQuery(
12371 public String getQueryName () {
12472 return MultiMatchQueryBuilder .NAME ;
12573 }
126-
127- /**
128- * Create a MultiMatchQueryBuilder with only a single field for non-inference indices
129- */
130- private MultiMatchQueryBuilder createSingleFieldMultiMatch (MultiMatchQueryBuilder original , String fieldName ) {
131- MultiMatchQueryBuilder singleFieldQuery = new MultiMatchQueryBuilder (original .value ());
132-
133- // Copy all properties from original query
134- singleFieldQuery .type (original .type ());
135- singleFieldQuery .operator (original .operator ());
136- singleFieldQuery .analyzer (original .analyzer ());
137- singleFieldQuery .fuzziness (original .fuzziness ());
138- singleFieldQuery .prefixLength (original .prefixLength ());
139- singleFieldQuery .maxExpansions (original .maxExpansions ());
140- singleFieldQuery .minimumShouldMatch (original .minimumShouldMatch ());
141- singleFieldQuery .fuzzyRewrite (original .fuzzyRewrite ());
142- singleFieldQuery .tieBreaker (original .tieBreaker ());
143- singleFieldQuery .lenient (original .lenient ());
144- singleFieldQuery .zeroTermsQuery (original .zeroTermsQuery ());
145- singleFieldQuery .autoGenerateSynonymsPhraseQuery (original .autoGenerateSynonymsPhraseQuery ());
146- singleFieldQuery .fuzzyTranspositions (original .fuzzyTranspositions ());
147-
148- // Add only the specific field (without boost for now)
149- singleFieldQuery .field (fieldName );
150-
151- return singleFieldQuery ;
152- }
15374}
0 commit comments