(improvment)(chat) semantic parse info dimension filters support UNION and AND splicing methods (#203)

Co-authored-by: jolunoluo
This commit is contained in:
LXW
2023-10-13 11:33:03 +08:00
committed by GitHub
parent 886ee32e2f
commit e4280e5516
6 changed files with 37 additions and 12 deletions

View File

@@ -220,7 +220,8 @@ public abstract class RuleSemanticQuery implements SemanticQuery, Serializable {
try {
explainSqlReq = ExplainSqlReq.builder()
.queryTypeEnum(QueryTypeEnum.STRUCT)
.queryReq(convertQueryStruct())
.queryReq(isMultiStructQuery()
? convertQueryMultiStruct() : convertQueryStruct())
.build();
return semanticInterpreter.explain(explainSqlReq, user);
} catch (Exception e) {
@@ -229,6 +230,10 @@ public abstract class RuleSemanticQuery implements SemanticQuery, Serializable {
return null;
}
protected boolean isMultiStructQuery() {
return false;
}
public QueryResult multiStructExecute(User user) {
String queryMode = parseInfo.getQueryMode();

View File

@@ -2,6 +2,7 @@ package com.tencent.supersonic.chat.query.rule.metric;
import com.tencent.supersonic.auth.api.authentication.pojo.User;
import com.tencent.supersonic.chat.api.pojo.response.QueryResult;
import com.tencent.supersonic.common.pojo.enums.FilterType;
import com.tencent.supersonic.semantic.api.query.enums.FilterOperatorEnum;
import com.tencent.supersonic.semantic.api.query.pojo.Filter;
import com.tencent.supersonic.semantic.api.query.request.QueryMultiStructReq;
@@ -52,7 +53,7 @@ public class MetricEntityQuery extends MetricSemanticQuery {
parseInfo.getDimensionFilters().stream()
.filter(filter -> filter.getElementID() != null)
.forEach(filter -> filterBizName.add(filter.getBizName()));
return filterBizName.size() > 1;
return FilterType.UNION.equals(parseInfo.getFilterType()) && filterBizName.size() > 1;
}
@Override

View File

@@ -6,6 +6,7 @@ import static com.tencent.supersonic.chat.query.rule.QueryMatchOption.RequireNum
import com.tencent.supersonic.auth.api.authentication.pojo.User;
import com.tencent.supersonic.chat.api.pojo.response.QueryResult;
import com.tencent.supersonic.common.pojo.enums.FilterType;
import com.tencent.supersonic.semantic.api.query.enums.FilterOperatorEnum;
import com.tencent.supersonic.semantic.api.query.pojo.Filter;
import com.tencent.supersonic.semantic.api.query.request.QueryMultiStructReq;
@@ -48,7 +49,7 @@ public class MetricFilterQuery extends MetricSemanticQuery {
Set<String> filterBizName = new HashSet<>();
parseInfo.getDimensionFilters().forEach(filter ->
filterBizName.add(filter.getBizName()));
return filterBizName.size() > 1;
return FilterType.UNION.equals(parseInfo.getFilterType()) && filterBizName.size() > 1;
}
@Override