Skip to content

Commit f3939c6

Browse files
committed
peng - align with lucene opensearch for request intake
Signed-off-by: Jialiang Liang <jiallian@amazon.com>
1 parent c87b5b8 commit f3939c6

3 files changed

Lines changed: 10 additions & 22 deletions

File tree

integ-test/src/test/resources/expectedOutput/calcite/explain_highlight_single_term.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,4 @@ calcite:
55
LogicalHighlight(highlightConfig=[[Holmes]])
66
CalciteLogicalIndexScan(table=[[OpenSearch, opensearch-sql_test_index_account]])
77
physical: |
8-
CalciteEnumerableIndexScan(table=[[OpenSearch, opensearch-sql_test_index_account]], PushDownContext=[[HIGHLIGHT->[Holmes], PROJECT->[account_number, firstname, address, balance, gender, city, employer, state, age, email, lastname, _highlight], LIMIT->10000], OpenSearchRequestBuilder(sourceBuilder={"from":0,"size":10000,"timeout":"1m","_source":{"includes":["account_number","firstname","address","balance","gender","city","employer","state","age","email","lastname"],"excludes":[]},"highlight":{"fragment_size":2147483647,"fields":{"*":{"highlight_query":{"query_string":{"query":"\"Holmes\"","default_field":"*","fields":[],"type":"best_fields","default_operator":"or","max_determinized_states":10000,"enable_position_increments":true,"fuzziness":"AUTO","fuzzy_prefix_length":0,"fuzzy_max_expansions":50,"phrase_slop":0,"escape":false,"auto_generate_synonyms_phrase_query":true,"fuzzy_transpositions":true,"boost":1.0}}}}}}, requestedTotalSize=10000, pageSize=null, startFrom=0)])
8+
CalciteEnumerableIndexScan(table=[[OpenSearch, opensearch-sql_test_index_account]], PushDownContext=[[HIGHLIGHT->[Holmes], PROJECT->[account_number, firstname, address, balance, gender, city, employer, state, age, email, lastname, _highlight], LIMIT->10000], OpenSearchRequestBuilder(sourceBuilder={"from":0,"size":10000,"timeout":"1m","_source":{"includes":["account_number","firstname","address","balance","gender","city","employer","state","age","email","lastname"],"excludes":[]},"highlight":{"fragment_size":2147483647,"fields":{"Holmes":{}}}}, requestedTotalSize=10000, pageSize=null, startFrom=0)])

integ-test/src/test/resources/expectedOutput/calcite_no_pushdown/explain_highlight_single_term.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,4 @@ calcite:
77
physical: |
88
EnumerableLimit(fetch=[10000])
99
EnumerableCalc(expr#0..17=[{inputs}], proj#0..10=[{exprs}], _highlight=[$t17])
10-
CalciteEnumerableIndexScan(table=[[OpenSearch, opensearch-sql_test_index_account]], PushDownContext=[[HIGHLIGHT->[Holmes]], OpenSearchRequestBuilder(sourceBuilder={"from":0,"timeout":"1m","highlight":{"fragment_size":2147483647,"fields":{"*":{"highlight_query":{"query_string":{"query":"\"Holmes\"","default_field":"*","fields":[],"type":"best_fields","default_operator":"or","max_determinized_states":10000,"enable_position_increments":true,"fuzziness":"AUTO","fuzzy_prefix_length":0,"fuzzy_max_expansions":50,"phrase_slop":0,"escape":false,"auto_generate_synonyms_phrase_query":true,"fuzzy_transpositions":true,"boost":1.0}}}}}}, requestedTotalSize=2147483647, pageSize=null, startFrom=0)])
10+
CalciteEnumerableIndexScan(table=[[OpenSearch, opensearch-sql_test_index_account]], PushDownContext=[[HIGHLIGHT->[Holmes]], OpenSearchRequestBuilder(sourceBuilder={"from":0,"timeout":"1m","highlight":{"fragment_size":2147483647,"fields":{"Holmes":{}}}}, requestedTotalSize=2147483647, pageSize=null, startFrom=0)])

opensearch/src/main/java/org/opensearch/sql/opensearch/storage/scan/AbstractCalciteIndexScan.java

Lines changed: 8 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -45,15 +45,18 @@
4545
import org.apache.logging.log4j.LogManager;
4646
import org.apache.logging.log4j.Logger;
4747
import org.checkerframework.checker.nullness.qual.Nullable;
48+
import org.opensearch.search.fetch.subphase.highlight.HighlightBuilder;
4849
import org.opensearch.search.sort.ScoreSortBuilder;
4950
import org.opensearch.search.sort.ScriptSortBuilder.ScriptSortType;
5051
import org.opensearch.search.sort.SortBuilder;
5152
import org.opensearch.search.sort.SortBuilders;
5253
import org.opensearch.search.sort.SortOrder;
54+
import org.opensearch.sql.ast.tree.HighlightConfig;
5355
import org.opensearch.sql.calcite.plan.AliasFieldsWrappable;
5456
import org.opensearch.sql.common.setting.Settings.Key;
5557
import org.opensearch.sql.data.type.ExprType;
5658
import org.opensearch.sql.opensearch.data.type.OpenSearchTextType;
59+
import org.opensearch.sql.opensearch.request.OpenSearchRequestBuilder;
5760
import org.opensearch.sql.opensearch.request.PredicateAnalyzer;
5861
import org.opensearch.sql.opensearch.storage.OpenSearchIndex;
5962
import org.opensearch.sql.opensearch.storage.scan.context.AbstractAction;
@@ -497,31 +500,16 @@ public boolean isProjectPushed() {
497500
}
498501

499502
protected static void applyHighlightPushDown(
500-
org.opensearch.sql.opensearch.request.OpenSearchRequestBuilder requestBuilder,
501-
org.opensearch.sql.ast.tree.HighlightConfig highlightConfig) {
503+
OpenSearchRequestBuilder requestBuilder, HighlightConfig highlightConfig) {
502504
if (highlightConfig == null
503505
|| highlightConfig.fields() == null
504506
|| highlightConfig.fields().isEmpty()) {
505507
return;
506508
}
507-
java.util.List<String> fields = highlightConfig.fields();
508-
org.opensearch.search.fetch.subphase.highlight.HighlightBuilder hb =
509-
new org.opensearch.search.fetch.subphase.highlight.HighlightBuilder();
510-
if (fields.size() == 1 && "*".equals(fields.get(0))) {
511-
// Wildcard: highlight search query matches in all fields
512-
hb.field("*");
513-
} else {
514-
// Highlight specific terms across all fields
515-
String queryStr =
516-
fields.stream()
517-
.map(term -> "\"" + term + "\"")
518-
.collect(java.util.stream.Collectors.joining(" OR "));
519-
org.opensearch.search.fetch.subphase.highlight.HighlightBuilder.Field field =
520-
new org.opensearch.search.fetch.subphase.highlight.HighlightBuilder.Field("*")
521-
.highlightQuery(
522-
org.opensearch.index.query.QueryBuilders.queryStringQuery(queryStr)
523-
.defaultField("*"));
524-
hb.field(field);
509+
List<String> fields = highlightConfig.fields();
510+
HighlightBuilder hb = new HighlightBuilder();
511+
for (String fieldName : fields) {
512+
hb.field(fieldName);
525513
}
526514

527515
// Apply pre_tags / post_tags if provided

0 commit comments

Comments
 (0)