mirror of
https://github.com/tencentmusic/supersonic.git
synced 2025-12-12 12:37:55 +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.ToString;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.collections4.CollectionUtils;
|
import org.apache.commons.collections4.CollectionUtils;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@ToString
|
@ToString
|
||||||
@@ -39,19 +40,30 @@ public abstract class BaseSemanticQuery implements SemanticQuery, Serializable {
|
|||||||
@Override
|
@Override
|
||||||
public String explain(User user) {
|
public String explain(User user) {
|
||||||
ExplainSqlReq explainSqlReq = null;
|
ExplainSqlReq explainSqlReq = null;
|
||||||
SqlInfo sqlInfo = parseInfo.getSqlInfo();
|
|
||||||
try {
|
try {
|
||||||
|
ExplainResp explain = null;
|
||||||
|
SqlInfo sqlInfo = parseInfo.getSqlInfo();
|
||||||
|
if (StringUtils.isNotBlank(sqlInfo.getCorrectS2SQL())) {
|
||||||
|
//sql
|
||||||
QueryS2SQLReq queryS2SQLReq = QueryReqBuilder.buildS2SQLReq(sqlInfo.getCorrectS2SQL(),
|
QueryS2SQLReq queryS2SQLReq = QueryReqBuilder.buildS2SQLReq(sqlInfo.getCorrectS2SQL(),
|
||||||
parseInfo.getModelId());
|
parseInfo.getModelId());
|
||||||
explainSqlReq = ExplainSqlReq.builder()
|
explainSqlReq = ExplainSqlReq.builder()
|
||||||
.queryTypeEnum(QueryTypeEnum.SQL)
|
.queryTypeEnum(QueryTypeEnum.SQL)
|
||||||
.queryReq(queryS2SQLReq)
|
.queryReq(queryS2SQLReq)
|
||||||
.build();
|
.build();
|
||||||
ExplainResp explain = semanticInterpreter.explain(explainSqlReq, user);
|
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)) {
|
if (Objects.nonNull(explain)) {
|
||||||
return explain.getSql();
|
return explain.getSql();
|
||||||
}
|
}
|
||||||
return explain.getSql();
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("explain error explainSqlReq:{}", explainSqlReq, e);
|
log.error("explain error explainSqlReq:{}", explainSqlReq, e);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,7 +24,8 @@ public class EntityInfoExecuteResponder implements ExecuteResponder {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
String queryMode = semanticParseInfo.getQueryMode();
|
String queryMode = semanticParseInfo.getQueryMode();
|
||||||
if (QueryManager.containsPluginQuery(queryMode) || MetricInterpretQuery.QUERY_MODE.equalsIgnoreCase(queryMode)) {
|
if (QueryManager.containsPluginQuery(queryMode) || MetricInterpretQuery.QUERY_MODE.equalsIgnoreCase(
|
||||||
|
queryMode)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
SemanticService semanticService = ContextUtils.getBean(SemanticService.class);
|
SemanticService semanticService = ContextUtils.getBean(SemanticService.class);
|
||||||
|
|||||||
@@ -26,7 +26,8 @@ public class EntityInfoParseResponder implements ParseResponder {
|
|||||||
QueryReq queryReq = queryContext.getRequest();
|
QueryReq queryReq = queryContext.getRequest();
|
||||||
selectedParses.forEach(parseInfo -> {
|
selectedParses.forEach(parseInfo -> {
|
||||||
String queryMode = parseInfo.getQueryMode();
|
String queryMode = parseInfo.getQueryMode();
|
||||||
if (QueryManager.containsPluginQuery(queryMode) || MetricInterpretQuery.QUERY_MODE.equalsIgnoreCase(queryMode)) {
|
if (QueryManager.containsPluginQuery(queryMode) || MetricInterpretQuery.QUERY_MODE.equalsIgnoreCase(
|
||||||
|
queryMode)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
//1. set entity info
|
//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.ExecuteQueryReq;
|
||||||
import com.tencent.supersonic.chat.api.pojo.request.QueryDataReq;
|
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.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.QueryReq;
|
||||||
import com.tencent.supersonic.chat.api.pojo.request.SolvedQueryReq;
|
import com.tencent.supersonic.chat.api.pojo.request.SolvedQueryReq;
|
||||||
import com.tencent.supersonic.chat.api.pojo.response.EntityInfo;
|
import com.tencent.supersonic.chat.api.pojo.response.EntityInfo;
|
||||||
@@ -329,6 +330,19 @@ public class QueryServiceImpl implements QueryService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
semanticQuery.setParseInfo(parseInfo);
|
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 queryResult = semanticQuery.execute(user);
|
||||||
queryResult.setChatContext(semanticQuery.getParseInfo());
|
queryResult.setChatContext(semanticQuery.getParseInfo());
|
||||||
SemanticService semanticService = ContextUtils.getBean(SemanticService.class);
|
SemanticService semanticService = ContextUtils.getBean(SemanticService.class);
|
||||||
@@ -519,7 +533,6 @@ public class QueryServiceImpl implements QueryService {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private SemanticParseInfo getSemanticParseInfo(QueryDataReq queryData, ChatParseDO chatParseDO) {
|
private SemanticParseInfo getSemanticParseInfo(QueryDataReq queryData, ChatParseDO chatParseDO) {
|
||||||
SemanticParseInfo parseInfo = JsonUtil.toObject(chatParseDO.getParseInfo(), SemanticParseInfo.class);
|
SemanticParseInfo parseInfo = JsonUtil.toObject(chatParseDO.getParseInfo(), SemanticParseInfo.class);
|
||||||
if (S2SQLQuery.QUERY_MODE.equals(parseInfo.getQueryMode())) {
|
if (S2SQLQuery.QUERY_MODE.equals(parseInfo.getQueryMode())) {
|
||||||
|
|||||||
@@ -8,4 +8,4 @@ long.text.threshold=0.8
|
|||||||
short.text.threshold=0.5
|
short.text.threshold=0.5
|
||||||
query.text.length.threshold=10
|
query.text.length.threshold=10
|
||||||
candidate.threshold=0.2
|
candidate.threshold=0.2
|
||||||
user.s2ql.switch=true
|
user.s2SQL.switch=true
|
||||||
@@ -38,7 +38,6 @@ public class QueryParser {
|
|||||||
if (semanticConverter.accept(queryStructReq)) {
|
if (semanticConverter.accept(queryStructReq)) {
|
||||||
log.info("SemanticConverter accept [{}]", semanticConverter.getClass().getName());
|
log.info("SemanticConverter accept [{}]", semanticConverter.getClass().getName());
|
||||||
semanticConverter.converter(catalog, queryStructReq, parseSqlReq, metricReq);
|
semanticConverter.converter(catalog, queryStructReq, parseSqlReq, metricReq);
|
||||||
log.info("SemanticConverter accept [{}]", semanticConverter.getClass().getName());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
log.info("SemanticConverter after {} {} {}", queryStructReq, metricReq, parseSqlReq);
|
log.info("SemanticConverter after {} {} {}", queryStructReq, metricReq, parseSqlReq);
|
||||||
|
|||||||
Reference in New Issue
Block a user