mirror of
https://github.com/tencentmusic/supersonic.git
synced 2025-12-10 19:51:00 +00:00
(improvement)(chat) Make s2ql switch compatible, executeDirectQuery also needs to perform corrections, and update ParserInfo. (#355)
This commit is contained in:
@@ -27,6 +27,7 @@ import java.util.stream.Collectors;
|
||||
import lombok.ToString;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
@Slf4j
|
||||
@ToString
|
||||
@@ -39,19 +40,30 @@ public abstract class BaseSemanticQuery implements SemanticQuery, Serializable {
|
||||
@Override
|
||||
public String explain(User user) {
|
||||
ExplainSqlReq explainSqlReq = null;
|
||||
SqlInfo sqlInfo = parseInfo.getSqlInfo();
|
||||
try {
|
||||
QueryS2SQLReq queryS2SQLReq = QueryReqBuilder.buildS2SQLReq(sqlInfo.getCorrectS2SQL(),
|
||||
parseInfo.getModelId());
|
||||
explainSqlReq = ExplainSqlReq.builder()
|
||||
.queryTypeEnum(QueryTypeEnum.SQL)
|
||||
.queryReq(queryS2SQLReq)
|
||||
.build();
|
||||
ExplainResp explain = semanticInterpreter.explain(explainSqlReq, user);
|
||||
ExplainResp explain = null;
|
||||
SqlInfo sqlInfo = parseInfo.getSqlInfo();
|
||||
if (StringUtils.isNotBlank(sqlInfo.getCorrectS2SQL())) {
|
||||
//sql
|
||||
QueryS2SQLReq queryS2SQLReq = QueryReqBuilder.buildS2SQLReq(sqlInfo.getCorrectS2SQL(),
|
||||
parseInfo.getModelId());
|
||||
explainSqlReq = ExplainSqlReq.builder()
|
||||
.queryTypeEnum(QueryTypeEnum.SQL)
|
||||
.queryReq(queryS2SQLReq)
|
||||
.build();
|
||||
explain = semanticInterpreter.explain(explainSqlReq, user);
|
||||
} else {
|
||||
//struct
|
||||
QueryStructReq queryStructReq = QueryReqBuilder.buildStructReq(parseInfo);
|
||||
explainSqlReq = ExplainSqlReq.builder()
|
||||
.queryTypeEnum(QueryTypeEnum.STRUCT)
|
||||
.queryReq(queryStructReq)
|
||||
.build();
|
||||
explain = semanticInterpreter.explain(explainSqlReq, user);
|
||||
}
|
||||
if (Objects.nonNull(explain)) {
|
||||
return explain.getSql();
|
||||
}
|
||||
return explain.getSql();
|
||||
} catch (Exception e) {
|
||||
log.error("explain error explainSqlReq:{}", explainSqlReq, e);
|
||||
}
|
||||
|
||||
@@ -24,7 +24,8 @@ public class EntityInfoExecuteResponder implements ExecuteResponder {
|
||||
return;
|
||||
}
|
||||
String queryMode = semanticParseInfo.getQueryMode();
|
||||
if (QueryManager.containsPluginQuery(queryMode) || MetricInterpretQuery.QUERY_MODE.equalsIgnoreCase(queryMode)) {
|
||||
if (QueryManager.containsPluginQuery(queryMode) || MetricInterpretQuery.QUERY_MODE.equalsIgnoreCase(
|
||||
queryMode)) {
|
||||
return;
|
||||
}
|
||||
SemanticService semanticService = ContextUtils.getBean(SemanticService.class);
|
||||
|
||||
@@ -26,7 +26,8 @@ public class EntityInfoParseResponder implements ParseResponder {
|
||||
QueryReq queryReq = queryContext.getRequest();
|
||||
selectedParses.forEach(parseInfo -> {
|
||||
String queryMode = parseInfo.getQueryMode();
|
||||
if (QueryManager.containsPluginQuery(queryMode) || MetricInterpretQuery.QUERY_MODE.equalsIgnoreCase(queryMode)) {
|
||||
if (QueryManager.containsPluginQuery(queryMode) || MetricInterpretQuery.QUERY_MODE.equalsIgnoreCase(
|
||||
queryMode)) {
|
||||
return;
|
||||
}
|
||||
//1. set entity info
|
||||
|
||||
@@ -15,6 +15,7 @@ import com.tencent.supersonic.chat.api.pojo.request.DimensionValueReq;
|
||||
import com.tencent.supersonic.chat.api.pojo.request.ExecuteQueryReq;
|
||||
import com.tencent.supersonic.chat.api.pojo.request.QueryDataReq;
|
||||
import com.tencent.supersonic.chat.api.pojo.request.QueryFilter;
|
||||
import com.tencent.supersonic.chat.api.pojo.request.QueryFilters;
|
||||
import com.tencent.supersonic.chat.api.pojo.request.QueryReq;
|
||||
import com.tencent.supersonic.chat.api.pojo.request.SolvedQueryReq;
|
||||
import com.tencent.supersonic.chat.api.pojo.response.EntityInfo;
|
||||
@@ -329,6 +330,19 @@ public class QueryServiceImpl implements QueryService {
|
||||
}
|
||||
}
|
||||
semanticQuery.setParseInfo(parseInfo);
|
||||
//init s2sql
|
||||
semanticQuery.initS2Sql(user);
|
||||
QueryReq queryReq = new QueryReq();
|
||||
queryReq.setQueryFilters(new QueryFilters());
|
||||
queryReq.setUser(user);
|
||||
|
||||
//correct s2sql
|
||||
semanticCorrectors.stream().forEach(correction -> {
|
||||
correction.correct(queryReq, semanticQuery.getParseInfo());
|
||||
});
|
||||
//update parserInfo
|
||||
parseInfoService.updateParseInfo(semanticQuery.getParseInfo());
|
||||
|
||||
QueryResult queryResult = semanticQuery.execute(user);
|
||||
queryResult.setChatContext(semanticQuery.getParseInfo());
|
||||
SemanticService semanticService = ContextUtils.getBean(SemanticService.class);
|
||||
@@ -519,7 +533,6 @@ public class QueryServiceImpl implements QueryService {
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
private SemanticParseInfo getSemanticParseInfo(QueryDataReq queryData, ChatParseDO chatParseDO) {
|
||||
SemanticParseInfo parseInfo = JsonUtil.toObject(chatParseDO.getParseInfo(), SemanticParseInfo.class);
|
||||
if (S2SQLQuery.QUERY_MODE.equals(parseInfo.getQueryMode())) {
|
||||
|
||||
@@ -8,4 +8,4 @@ long.text.threshold=0.8
|
||||
short.text.threshold=0.5
|
||||
query.text.length.threshold=10
|
||||
candidate.threshold=0.2
|
||||
user.s2ql.switch=true
|
||||
user.s2SQL.switch=true
|
||||
@@ -38,7 +38,6 @@ public class QueryParser {
|
||||
if (semanticConverter.accept(queryStructReq)) {
|
||||
log.info("SemanticConverter accept [{}]", semanticConverter.getClass().getName());
|
||||
semanticConverter.converter(catalog, queryStructReq, parseSqlReq, metricReq);
|
||||
log.info("SemanticConverter accept [{}]", semanticConverter.getClass().getName());
|
||||
}
|
||||
}
|
||||
log.info("SemanticConverter after {} {} {}", queryStructReq, metricReq, parseSqlReq);
|
||||
|
||||
Reference in New Issue
Block a user