mirror of
https://github.com/open-metadata/OpenMetadata.git
synced 2025-09-01 05:03:10 +00:00
Search issues: Revert to using queryStringBuilder (#20337)
* Search issues: Revert to using queryStringBuilder * Search issues: Revert to using queryStringBuilder * Search issues: Revert to using queryStringBuilder
This commit is contained in:
parent
0f714f21a5
commit
e2cce8372e
@ -8,6 +8,7 @@ import static org.openmetadata.service.search.SearchUtil.isTimeSeriesIndex;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
import org.openmetadata.schema.api.search.AssetTypeConfiguration;
|
import org.openmetadata.schema.api.search.AssetTypeConfiguration;
|
||||||
import org.openmetadata.schema.api.search.SearchSettings;
|
import org.openmetadata.schema.api.search.SearchSettings;
|
||||||
import org.openmetadata.service.Entity;
|
import org.openmetadata.service.Entity;
|
||||||
@ -23,6 +24,23 @@ import org.openmetadata.service.Entity;
|
|||||||
*/
|
*/
|
||||||
public interface SearchSourceBuilderFactory<S, Q, H, F> {
|
public interface SearchSourceBuilderFactory<S, Q, H, F> {
|
||||||
|
|
||||||
|
Pattern QUERY_SYNTAX_PATTERN =
|
||||||
|
Pattern.compile(
|
||||||
|
"\\w+\\s*:\\s*\\w+|"
|
||||||
|
+ // Field queries (field:value)
|
||||||
|
"\\b(?i)(?:AND|OR|NOT)\\b|"
|
||||||
|
+ // Boolean operators
|
||||||
|
"[*?]|"
|
||||||
|
+ // Wildcards
|
||||||
|
"[()]|"
|
||||||
|
+ // Parentheses
|
||||||
|
"\"|"
|
||||||
|
+ // Quotes
|
||||||
|
"\\[.+\\s+TO\\s+.+\\]|"
|
||||||
|
+ // Range queries
|
||||||
|
"[+\\-~\\^]" // Special operators
|
||||||
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the appropriate search source builder based on the index name.
|
* Get the appropriate search source builder based on the index name.
|
||||||
*
|
*
|
||||||
@ -207,4 +225,12 @@ public interface SearchSourceBuilderFactory<S, Q, H, F> {
|
|||||||
S searchBuilder(Q queryBuilder, H highlightBuilder, int from, int size);
|
S searchBuilder(Q queryBuilder, H highlightBuilder, int from, int size);
|
||||||
|
|
||||||
S addAggregationsToNLQQuery(S searchSourceBuilder, String indexName);
|
S addAggregationsToNLQQuery(S searchSourceBuilder, String indexName);
|
||||||
|
|
||||||
|
default boolean containsQuerySyntax(String query) {
|
||||||
|
if (query == null || query.isEmpty()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
query = query.replace("%20", " ").trim();
|
||||||
|
return QUERY_SYNTAX_PATTERN.matcher(query).find();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -153,6 +153,17 @@ public class ElasticSearchSourceBuilderFactory
|
|||||||
|
|
||||||
if (query == null || query.trim().isEmpty() || query.trim().equals("*")) {
|
if (query == null || query.trim().isEmpty() || query.trim().equals("*")) {
|
||||||
baseQuery.must(QueryBuilders.matchAllQuery());
|
baseQuery.must(QueryBuilders.matchAllQuery());
|
||||||
|
} else if (containsQuerySyntax(query)) {
|
||||||
|
QueryStringQueryBuilder queryStringBuilder =
|
||||||
|
QueryBuilders.queryStringQuery(query)
|
||||||
|
.fields(fields)
|
||||||
|
.defaultOperator(Operator.AND)
|
||||||
|
.type(MultiMatchQueryBuilder.Type.MOST_FIELDS)
|
||||||
|
.fuzziness(Fuzziness.AUTO)
|
||||||
|
.fuzzyPrefixLength(1)
|
||||||
|
.tieBreaker(0.3f);
|
||||||
|
|
||||||
|
baseQuery.must(queryStringBuilder);
|
||||||
} else {
|
} else {
|
||||||
MultiMatchQueryBuilder multiMatchQueryBuilder =
|
MultiMatchQueryBuilder multiMatchQueryBuilder =
|
||||||
QueryBuilders.multiMatchQuery(query)
|
QueryBuilders.multiMatchQuery(query)
|
||||||
|
@ -3,6 +3,7 @@ package org.openmetadata.service.search.opensearch;
|
|||||||
import static org.openmetadata.common.utils.CommonUtil.listOrEmpty;
|
import static org.openmetadata.common.utils.CommonUtil.listOrEmpty;
|
||||||
import static org.openmetadata.service.search.EntityBuilderConstant.POST_TAG;
|
import static org.openmetadata.service.search.EntityBuilderConstant.POST_TAG;
|
||||||
import static org.openmetadata.service.search.EntityBuilderConstant.PRE_TAG;
|
import static org.openmetadata.service.search.EntityBuilderConstant.PRE_TAG;
|
||||||
|
import static os.org.opensearch.index.query.MultiMatchQueryBuilder.Type.MOST_FIELDS;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@ -47,7 +48,7 @@ public class OpenSearchSourceBuilderFactory
|
|||||||
public QueryStringQueryBuilder buildSearchQueryBuilder(String query, Map<String, Float> fields) {
|
public QueryStringQueryBuilder buildSearchQueryBuilder(String query, Map<String, Float> fields) {
|
||||||
return QueryBuilders.queryStringQuery(query)
|
return QueryBuilders.queryStringQuery(query)
|
||||||
.fields(fields)
|
.fields(fields)
|
||||||
.type(MultiMatchQueryBuilder.Type.MOST_FIELDS)
|
.type(MOST_FIELDS)
|
||||||
.defaultOperator(Operator.AND)
|
.defaultOperator(Operator.AND)
|
||||||
.fuzziness(Fuzziness.AUTO)
|
.fuzziness(Fuzziness.AUTO)
|
||||||
.fuzzyPrefixLength(3)
|
.fuzzyPrefixLength(3)
|
||||||
@ -152,6 +153,17 @@ public class OpenSearchSourceBuilderFactory
|
|||||||
BoolQueryBuilder baseQuery = QueryBuilders.boolQuery();
|
BoolQueryBuilder baseQuery = QueryBuilders.boolQuery();
|
||||||
if (query == null || query.trim().isEmpty() || query.trim().equals("*")) {
|
if (query == null || query.trim().isEmpty() || query.trim().equals("*")) {
|
||||||
baseQuery.must(QueryBuilders.matchAllQuery());
|
baseQuery.must(QueryBuilders.matchAllQuery());
|
||||||
|
} else if (containsQuerySyntax(query)) {
|
||||||
|
QueryStringQueryBuilder queryStringBuilder =
|
||||||
|
QueryBuilders.queryStringQuery(query)
|
||||||
|
.fields(fields)
|
||||||
|
.defaultOperator(Operator.AND)
|
||||||
|
.type(MultiMatchQueryBuilder.Type.MOST_FIELDS)
|
||||||
|
.fuzziness(Fuzziness.AUTO)
|
||||||
|
.fuzzyPrefixLength(1)
|
||||||
|
.tieBreaker(0.3f);
|
||||||
|
|
||||||
|
baseQuery.must(queryStringBuilder);
|
||||||
} else {
|
} else {
|
||||||
MultiMatchQueryBuilder multiMatchQueryBuilder =
|
MultiMatchQueryBuilder multiMatchQueryBuilder =
|
||||||
QueryBuilders.multiMatchQuery(query)
|
QueryBuilders.multiMatchQuery(query)
|
||||||
|
@ -56,12 +56,12 @@
|
|||||||
"field": "databaseSchema.name.keyword"
|
"field": "databaseSchema.name.keyword"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "database.displayName.keyword",
|
"name": "database.displayName",
|
||||||
"type": "terms",
|
"type": "terms",
|
||||||
"field": "database.displayName.keyword"
|
"field": "database.displayName.keyword"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "databaseSchema.displayName.keyword",
|
"name": "databaseSchema.displayName",
|
||||||
"type": "terms",
|
"type": "terms",
|
||||||
"field": "databaseSchema.displayName.keyword"
|
"field": "databaseSchema.displayName.keyword"
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user