[improvement][headless]Optimize code structure and code style.

This commit is contained in:
jerryjzhang
2024-07-27 18:29:08 +08:00
parent e5504473a4
commit ccd79e4830
55 changed files with 138 additions and 168 deletions

View File

@@ -2,7 +2,6 @@ package com.tencent.supersonic.chat.api.pojo.response;
import com.tencent.supersonic.headless.api.pojo.SemanticParseInfo; import com.tencent.supersonic.headless.api.pojo.SemanticParseInfo;
import com.tencent.supersonic.headless.api.pojo.response.ParseTimeCostResp; import com.tencent.supersonic.headless.api.pojo.response.ParseTimeCostResp;
import com.tencent.supersonic.headless.api.pojo.response.QueryResult;
import lombok.Data; import lombok.Data;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;

View File

@@ -1,4 +1,4 @@
package com.tencent.supersonic.headless.api.pojo.response; package com.tencent.supersonic.chat.api.pojo.response;
import com.tencent.supersonic.common.pojo.QueryAuthorization; import com.tencent.supersonic.common.pojo.QueryAuthorization;
import com.tencent.supersonic.common.pojo.QueryColumn; import com.tencent.supersonic.common.pojo.QueryColumn;
@@ -6,6 +6,7 @@ import com.tencent.supersonic.headless.api.pojo.AggregateInfo;
import com.tencent.supersonic.headless.api.pojo.EntityInfo; import com.tencent.supersonic.headless.api.pojo.EntityInfo;
import com.tencent.supersonic.headless.api.pojo.SchemaElement; import com.tencent.supersonic.headless.api.pojo.SchemaElement;
import com.tencent.supersonic.headless.api.pojo.SemanticParseInfo; import com.tencent.supersonic.headless.api.pojo.SemanticParseInfo;
import com.tencent.supersonic.headless.api.pojo.response.QueryState;
import lombok.Data; import lombok.Data;
import java.util.List; import java.util.List;

View File

@@ -1,7 +1,7 @@
package com.tencent.supersonic.chat.server.executor; package com.tencent.supersonic.chat.server.executor;
import com.tencent.supersonic.chat.server.pojo.ExecuteContext; import com.tencent.supersonic.chat.server.pojo.ExecuteContext;
import com.tencent.supersonic.headless.api.pojo.response.QueryResult; import com.tencent.supersonic.chat.api.pojo.response.QueryResult;
public interface ChatQueryExecutor { public interface ChatQueryExecutor {

View File

@@ -8,7 +8,7 @@ import com.tencent.supersonic.chat.server.pojo.ExecuteContext;
import com.tencent.supersonic.chat.server.service.AgentService; import com.tencent.supersonic.chat.server.service.AgentService;
import com.tencent.supersonic.common.util.ContextUtils; import com.tencent.supersonic.common.util.ContextUtils;
import com.tencent.supersonic.headless.api.pojo.response.ParseResp; import com.tencent.supersonic.headless.api.pojo.response.ParseResp;
import com.tencent.supersonic.headless.api.pojo.response.QueryResult; import com.tencent.supersonic.chat.api.pojo.response.QueryResult;
import com.tencent.supersonic.headless.api.pojo.response.QueryState; import com.tencent.supersonic.headless.api.pojo.response.QueryState;
import dev.langchain4j.data.message.AiMessage; import dev.langchain4j.data.message.AiMessage;
import dev.langchain4j.model.chat.ChatLanguageModel; import dev.langchain4j.model.chat.ChatLanguageModel;

View File

@@ -4,7 +4,7 @@ import com.tencent.supersonic.chat.server.plugin.PluginQueryManager;
import com.tencent.supersonic.chat.server.plugin.build.PluginSemanticQuery; import com.tencent.supersonic.chat.server.plugin.build.PluginSemanticQuery;
import com.tencent.supersonic.chat.server.pojo.ExecuteContext; import com.tencent.supersonic.chat.server.pojo.ExecuteContext;
import com.tencent.supersonic.headless.api.pojo.SemanticParseInfo; import com.tencent.supersonic.headless.api.pojo.SemanticParseInfo;
import com.tencent.supersonic.headless.api.pojo.response.QueryResult; import com.tencent.supersonic.chat.api.pojo.response.QueryResult;
public class PluginExecutor implements ChatQueryExecutor { public class PluginExecutor implements ChatQueryExecutor {

View File

@@ -5,13 +5,12 @@ import com.tencent.supersonic.chat.server.persistence.dataobject.ChatMemoryDO;
import com.tencent.supersonic.chat.server.pojo.ExecuteContext; import com.tencent.supersonic.chat.server.pojo.ExecuteContext;
import com.tencent.supersonic.chat.server.service.MemoryService; import com.tencent.supersonic.chat.server.service.MemoryService;
import com.tencent.supersonic.chat.server.util.ResultFormatter; import com.tencent.supersonic.chat.server.util.ResultFormatter;
import com.tencent.supersonic.common.pojo.QueryColumn;
import com.tencent.supersonic.common.pojo.Text2SQLExemplar; import com.tencent.supersonic.common.pojo.Text2SQLExemplar;
import com.tencent.supersonic.common.util.ContextUtils; import com.tencent.supersonic.common.util.ContextUtils;
import com.tencent.supersonic.common.util.JsonUtil; import com.tencent.supersonic.common.util.JsonUtil;
import com.tencent.supersonic.headless.api.pojo.SemanticParseInfo; import com.tencent.supersonic.headless.api.pojo.SemanticParseInfo;
import com.tencent.supersonic.headless.api.pojo.request.QuerySqlReq; import com.tencent.supersonic.headless.api.pojo.request.QuerySqlReq;
import com.tencent.supersonic.headless.api.pojo.response.QueryResult; import com.tencent.supersonic.chat.api.pojo.response.QueryResult;
import com.tencent.supersonic.headless.api.pojo.response.QueryState; import com.tencent.supersonic.headless.api.pojo.response.QueryState;
import com.tencent.supersonic.headless.api.pojo.response.SemanticQueryResp; import com.tencent.supersonic.headless.api.pojo.response.SemanticQueryResp;
import com.tencent.supersonic.chat.server.pojo.ChatContext; import com.tencent.supersonic.chat.server.pojo.ChatContext;
@@ -21,10 +20,7 @@ import com.tencent.supersonic.chat.server.service.ChatContextService;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Objects; import java.util.Objects;
public class SqlExecutor implements ChatQueryExecutor { public class SqlExecutor implements ChatQueryExecutor {
@@ -80,27 +76,24 @@ public class SqlExecutor implements ChatQueryExecutor {
.build(); .build();
sqlReq.setSqlInfo(parseInfo.getSqlInfo()); sqlReq.setSqlInfo(parseInfo.getSqlInfo());
sqlReq.setDataSetId(parseInfo.getDataSetId()); sqlReq.setDataSetId(parseInfo.getDataSetId());
long startTime = System.currentTimeMillis(); long startTime = System.currentTimeMillis();
SemanticQueryResp queryResp = semanticLayer.queryByReq(sqlReq, executeContext.getUser()); SemanticQueryResp queryResp = semanticLayer.queryByReq(sqlReq, executeContext.getUser());
QueryResult queryResult = new QueryResult(); QueryResult queryResult = new QueryResult();
queryResult.setChatContext(parseInfo); queryResult.setChatContext(parseInfo);
queryResult.setQueryMode(parseInfo.getQueryMode()); queryResult.setQueryMode(parseInfo.getQueryMode());
queryResult.setQueryTimeCost(System.currentTimeMillis() - startTime);
if (queryResp != null) { if (queryResp != null) {
queryResult.setQueryAuthorization(queryResp.getQueryAuthorization()); queryResult.setQueryAuthorization(queryResp.getQueryAuthorization());
List<Map<String, Object>> resultList = queryResp == null ? new ArrayList<>()
: queryResp.getResultList();
List<QueryColumn> columns = queryResp == null ? new ArrayList<>() : queryResp.getColumns();
queryResult.setQueryTimeCost(System.currentTimeMillis() - startTime);
queryResult.setQuerySql(queryResp.getSql()); queryResult.setQuerySql(queryResp.getSql());
queryResult.setQueryResults(resultList); queryResult.setQueryResults(queryResp.getResultList());
queryResult.setQueryColumns(columns); queryResult.setQueryColumns(queryResp.getColumns());
queryResult.setQueryState(QueryState.SUCCESS); queryResult.setQueryState(QueryState.SUCCESS);
chatCtx.setParseInfo(parseInfo); chatCtx.setParseInfo(parseInfo);
chatContextService.updateContext(chatCtx); chatContextService.updateContext(chatCtx);
} else { } else {
queryResult.setQueryState(QueryState.INVALID); queryResult.setQueryState(QueryState.INVALID);
queryResult.setQueryMode(parseInfo.getQueryMode());
} }
return queryResult; return queryResult;
} }

View File

@@ -20,7 +20,7 @@ import com.tencent.supersonic.headless.api.pojo.SemanticParseInfo;
import com.tencent.supersonic.headless.api.pojo.response.ParseResp; import com.tencent.supersonic.headless.api.pojo.response.ParseResp;
import com.tencent.supersonic.chat.api.pojo.response.QueryResp; import com.tencent.supersonic.chat.api.pojo.response.QueryResp;
import com.tencent.supersonic.headless.api.pojo.response.ParseTimeCostResp; import com.tencent.supersonic.headless.api.pojo.response.ParseTimeCostResp;
import com.tencent.supersonic.headless.api.pojo.response.QueryResult; import com.tencent.supersonic.chat.api.pojo.response.QueryResult;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;

View File

@@ -7,7 +7,7 @@ import com.tencent.supersonic.headless.api.pojo.SchemaElementType;
import com.tencent.supersonic.headless.api.pojo.SemanticParseInfo; import com.tencent.supersonic.headless.api.pojo.SemanticParseInfo;
import com.tencent.supersonic.headless.api.pojo.request.QueryFilter; import com.tencent.supersonic.headless.api.pojo.request.QueryFilter;
import com.tencent.supersonic.headless.api.pojo.request.QueryFilters; import com.tencent.supersonic.headless.api.pojo.request.QueryFilters;
import com.tencent.supersonic.headless.api.pojo.response.QueryResult; import com.tencent.supersonic.chat.api.pojo.response.QueryResult;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;

View File

@@ -7,7 +7,7 @@ import com.tencent.supersonic.chat.server.plugin.build.PluginSemanticQuery;
import com.tencent.supersonic.chat.server.plugin.build.WebBase; import com.tencent.supersonic.chat.server.plugin.build.WebBase;
import com.tencent.supersonic.common.pojo.Constants; import com.tencent.supersonic.common.pojo.Constants;
import com.tencent.supersonic.common.util.JsonUtil; import com.tencent.supersonic.common.util.JsonUtil;
import com.tencent.supersonic.headless.api.pojo.response.QueryResult; import com.tencent.supersonic.chat.api.pojo.response.QueryResult;
import com.tencent.supersonic.headless.api.pojo.response.QueryState; import com.tencent.supersonic.headless.api.pojo.response.QueryState;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;

View File

@@ -11,7 +11,7 @@ import com.tencent.supersonic.common.pojo.Constants;
import com.tencent.supersonic.common.pojo.QueryColumn; import com.tencent.supersonic.common.pojo.QueryColumn;
import com.tencent.supersonic.common.util.ContextUtils; import com.tencent.supersonic.common.util.ContextUtils;
import com.tencent.supersonic.common.util.JsonUtil; import com.tencent.supersonic.common.util.JsonUtil;
import com.tencent.supersonic.headless.api.pojo.response.QueryResult; import com.tencent.supersonic.chat.api.pojo.response.QueryResult;
import com.tencent.supersonic.headless.api.pojo.response.QueryState; import com.tencent.supersonic.headless.api.pojo.response.QueryState;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpEntity; import org.springframework.http.HttpEntity;

View File

@@ -73,7 +73,7 @@ public abstract class PluginRecognizer {
SemanticParseInfo semanticParseInfo = new SemanticParseInfo(); SemanticParseInfo semanticParseInfo = new SemanticParseInfo();
semanticParseInfo.setElementMatches(schemaElementMatches); semanticParseInfo.setElementMatches(schemaElementMatches);
SchemaElement schemaElement = new SchemaElement(); SchemaElement schemaElement = new SchemaElement();
schemaElement.setDataSet(dataSetId); schemaElement.setDataSetId(dataSetId);
semanticParseInfo.setDataSet(schemaElement); semanticParseInfo.setDataSet(schemaElement);
Map<String, Object> properties = new HashMap<>(); Map<String, Object> properties = new HashMap<>();
PluginParseResult pluginParseResult = new PluginParseResult(); PluginParseResult pluginParseResult = new PluginParseResult();

View File

@@ -8,7 +8,7 @@ import com.tencent.supersonic.headless.api.pojo.DataSetSchema;
import com.tencent.supersonic.headless.api.pojo.RelatedSchemaElement; import com.tencent.supersonic.headless.api.pojo.RelatedSchemaElement;
import com.tencent.supersonic.headless.api.pojo.SchemaElement; import com.tencent.supersonic.headless.api.pojo.SchemaElement;
import com.tencent.supersonic.headless.api.pojo.SemanticParseInfo; import com.tencent.supersonic.headless.api.pojo.SemanticParseInfo;
import com.tencent.supersonic.headless.api.pojo.response.QueryResult; import com.tencent.supersonic.chat.api.pojo.response.QueryResult;
import com.tencent.supersonic.headless.server.facade.service.SemanticLayerService; import com.tencent.supersonic.headless.server.facade.service.SemanticLayerService;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
@@ -35,7 +35,7 @@ public class DimensionRecommendProcessor implements ExecuteResultProcessor {
return; return;
} }
SchemaElement element = semanticParseInfo.getMetrics().iterator().next(); SchemaElement element = semanticParseInfo.getMetrics().iterator().next();
List<SchemaElement> dimensionRecommended = getDimensions(element.getId(), element.getDataSet()); List<SchemaElement> dimensionRecommended = getDimensions(element.getId(), element.getDataSetId());
queryResult.setRecommendedDimensions(dimensionRecommended); queryResult.setRecommendedDimensions(dimensionRecommended);
} }

View File

@@ -2,7 +2,7 @@ package com.tencent.supersonic.chat.server.processor.execute;
import com.tencent.supersonic.chat.server.pojo.ExecuteContext; import com.tencent.supersonic.chat.server.pojo.ExecuteContext;
import com.tencent.supersonic.chat.server.processor.ResultProcessor; import com.tencent.supersonic.chat.server.processor.ResultProcessor;
import com.tencent.supersonic.headless.api.pojo.response.QueryResult; import com.tencent.supersonic.chat.api.pojo.response.QueryResult;
/** /**
* A ExecuteResultProcessor wraps things up before returning * A ExecuteResultProcessor wraps things up before returning

View File

@@ -26,7 +26,7 @@ import com.tencent.supersonic.headless.api.pojo.MetricInfo;
import com.tencent.supersonic.headless.api.pojo.SchemaElement; import com.tencent.supersonic.headless.api.pojo.SchemaElement;
import com.tencent.supersonic.headless.api.pojo.SemanticParseInfo; import com.tencent.supersonic.headless.api.pojo.SemanticParseInfo;
import com.tencent.supersonic.headless.api.pojo.request.QueryStructReq; import com.tencent.supersonic.headless.api.pojo.request.QueryStructReq;
import com.tencent.supersonic.headless.api.pojo.response.QueryResult; import com.tencent.supersonic.chat.api.pojo.response.QueryResult;
import com.tencent.supersonic.headless.api.pojo.response.SemanticQueryResp; import com.tencent.supersonic.headless.api.pojo.response.SemanticQueryResp;
import com.tencent.supersonic.headless.core.config.AggregatorConfig; import com.tencent.supersonic.headless.core.config.AggregatorConfig;
import com.tencent.supersonic.headless.chat.utils.QueryReqBuilder; import com.tencent.supersonic.headless.chat.utils.QueryReqBuilder;

View File

@@ -12,7 +12,7 @@ import dev.langchain4j.store.embedding.RetrieveQueryResult;
import com.tencent.supersonic.headless.api.pojo.SchemaElement; import com.tencent.supersonic.headless.api.pojo.SchemaElement;
import com.tencent.supersonic.headless.api.pojo.SchemaElementType; import com.tencent.supersonic.headless.api.pojo.SchemaElementType;
import com.tencent.supersonic.headless.api.pojo.SemanticParseInfo; import com.tencent.supersonic.headless.api.pojo.SemanticParseInfo;
import com.tencent.supersonic.headless.api.pojo.response.QueryResult; import com.tencent.supersonic.chat.api.pojo.response.QueryResult;
import com.tencent.supersonic.headless.chat.knowledge.MetaEmbeddingService; import com.tencent.supersonic.headless.chat.knowledge.MetaEmbeddingService;
import java.util.Objects; import java.util.Objects;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
@@ -46,7 +46,7 @@ public class MetricRecommendProcessor implements ExecuteResultProcessor {
} }
List<String> metricNames = Collections.singletonList(parseInfo.getMetrics().iterator().next().getName()); List<String> metricNames = Collections.singletonList(parseInfo.getMetrics().iterator().next().getName());
Map<String, String> filterCondition = new HashMap<>(); Map<String, String> filterCondition = new HashMap<>();
filterCondition.put("modelId", parseInfo.getMetrics().iterator().next().getDataSet().toString()); filterCondition.put("modelId", parseInfo.getMetrics().iterator().next().getDataSetId().toString());
filterCondition.put("type", SchemaElementType.METRIC.name()); filterCondition.put("type", SchemaElementType.METRIC.name());
RetrieveQuery retrieveQuery = RetrieveQuery.builder().queryTextsList(metricNames) RetrieveQuery retrieveQuery = RetrieveQuery.builder().queryTextsList(metricNames)
.filterCondition(filterCondition).queryEmbeddings(null).build(); .filterCondition(filterCondition).queryEmbeddings(null).build();
@@ -78,7 +78,7 @@ public class MetricRecommendProcessor implements ExecuteResultProcessor {
if (retrieval.getMetadata().containsKey("dataSetId")) { if (retrieval.getMetadata().containsKey("dataSetId")) {
String dataSetId = retrieval.getMetadata().get("dataSetId").toString() String dataSetId = retrieval.getMetadata().get("dataSetId").toString()
.replace(Constants.UNDERLINE, ""); .replace(Constants.UNDERLINE, "");
schemaElement.setDataSet(Long.parseLong(dataSetId)); schemaElement.setDataSetId(Long.parseLong(dataSetId));
} }
schemaElement.setOrder(++metricOrder); schemaElement.setOrder(++metricOrder);
parseInfo.getMetrics().add(schemaElement); parseInfo.getMetrics().add(schemaElement);

View File

@@ -12,7 +12,7 @@ import com.tencent.supersonic.chat.server.persistence.dataobject.ChatParseDO;
import com.tencent.supersonic.chat.server.persistence.dataobject.ChatQueryDO; import com.tencent.supersonic.chat.server.persistence.dataobject.ChatQueryDO;
import com.tencent.supersonic.headless.api.pojo.SemanticParseInfo; import com.tencent.supersonic.headless.api.pojo.SemanticParseInfo;
import com.tencent.supersonic.headless.api.pojo.response.ParseResp; import com.tencent.supersonic.headless.api.pojo.response.ParseResp;
import com.tencent.supersonic.headless.api.pojo.response.QueryResult; import com.tencent.supersonic.chat.api.pojo.response.QueryResult;
import java.util.List; import java.util.List;

View File

@@ -6,7 +6,7 @@ import com.tencent.supersonic.chat.api.pojo.request.ChatParseReq;
import com.tencent.supersonic.chat.api.pojo.request.ChatQueryDataReq; import com.tencent.supersonic.chat.api.pojo.request.ChatQueryDataReq;
import com.tencent.supersonic.headless.api.pojo.request.DimensionValueReq; import com.tencent.supersonic.headless.api.pojo.request.DimensionValueReq;
import com.tencent.supersonic.headless.api.pojo.response.ParseResp; import com.tencent.supersonic.headless.api.pojo.response.ParseResp;
import com.tencent.supersonic.headless.api.pojo.response.QueryResult; import com.tencent.supersonic.chat.api.pojo.response.QueryResult;
import com.tencent.supersonic.headless.api.pojo.response.SearchResult; import com.tencent.supersonic.headless.api.pojo.response.SearchResult;
import java.util.List; import java.util.List;

View File

@@ -18,7 +18,7 @@ import com.tencent.supersonic.chat.server.service.ChatManageService;
import com.tencent.supersonic.common.util.JsonUtil; import com.tencent.supersonic.common.util.JsonUtil;
import com.tencent.supersonic.headless.api.pojo.SemanticParseInfo; import com.tencent.supersonic.headless.api.pojo.SemanticParseInfo;
import com.tencent.supersonic.headless.api.pojo.response.ParseResp; import com.tencent.supersonic.headless.api.pojo.response.ParseResp;
import com.tencent.supersonic.headless.api.pojo.response.QueryResult; import com.tencent.supersonic.chat.api.pojo.response.QueryResult;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;

View File

@@ -39,7 +39,7 @@ import com.tencent.supersonic.headless.api.pojo.request.QueryNLReq;
import com.tencent.supersonic.headless.api.pojo.request.SemanticQueryReq; import com.tencent.supersonic.headless.api.pojo.request.SemanticQueryReq;
import com.tencent.supersonic.headless.api.pojo.response.MapResp; import com.tencent.supersonic.headless.api.pojo.response.MapResp;
import com.tencent.supersonic.headless.api.pojo.response.ParseResp; import com.tencent.supersonic.headless.api.pojo.response.ParseResp;
import com.tencent.supersonic.headless.api.pojo.response.QueryResult; import com.tencent.supersonic.chat.api.pojo.response.QueryResult;
import com.tencent.supersonic.headless.api.pojo.response.QueryState; import com.tencent.supersonic.headless.api.pojo.response.QueryState;
import com.tencent.supersonic.headless.api.pojo.response.SearchResult; import com.tencent.supersonic.headless.api.pojo.response.SearchResult;
import com.tencent.supersonic.headless.api.pojo.response.SemanticQueryResp; import com.tencent.supersonic.headless.api.pojo.response.SemanticQueryResp;
@@ -120,7 +120,6 @@ public class ChatQueryServiceImpl implements ChatQueryService {
processor.process(parseContext, parseResp); processor.process(parseContext, parseResp);
} }
chatParseReq.setQueryText(parseContext.getQueryText()); chatParseReq.setQueryText(parseContext.getQueryText());
parseResp.setQueryText(parseContext.getQueryText());
chatManageService.batchAddParse(chatParseReq, parseResp); chatManageService.batchAddParse(chatParseReq, parseResp);
chatManageService.updateParseCostTime(parseResp); chatManageService.updateParseCostTime(parseResp);
return parseResp; return parseResp;
@@ -352,8 +351,8 @@ public class ChatQueryServiceImpl implements ChatQueryService {
for (FieldExpression fieldExpression : fieldExpressionList) { for (FieldExpression fieldExpression : fieldExpressionList) {
for (QueryFilter queryFilter : queryData.getDimensionFilters()) { for (QueryFilter queryFilter : queryData.getDimensionFilters()) {
if (queryFilter.getOperator().equals(FilterOperatorEnum.LIKE) if (queryFilter.getOperator().equals(FilterOperatorEnum.LIKE)
&& FilterOperatorEnum.LIKE.getValue().toLowerCase().equals( && FilterOperatorEnum.LIKE.getValue().equalsIgnoreCase(
fieldExpression.getOperator().toLowerCase())) { fieldExpression.getOperator())) {
Map<String, String> replaceMap = new HashMap<>(); Map<String, String> replaceMap = new HashMap<>();
String preValue = fieldExpression.getFieldValue().toString(); String preValue = fieldExpression.getFieldValue().toString();
String curValue = queryFilter.getValue().toString(); String curValue = queryFilter.getValue().toString();

View File

@@ -46,11 +46,6 @@
</exclusion> </exclusion>
</exclusions> </exclusions>
</dependency> </dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>${commons.lang.version}</version>
</dependency>
<dependency> <dependency>
<groupId>com.alibaba</groupId> <groupId>com.alibaba</groupId>
@@ -67,6 +62,11 @@
<groupId>org.apache.commons</groupId> <groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId> <artifactId>commons-lang3</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-compress</artifactId>
<version>${commons.compress.version}</version>
</dependency>
<dependency> <dependency>
<groupId>org.junit.jupiter</groupId> <groupId>org.junit.jupiter</groupId>

View File

@@ -17,7 +17,7 @@ import java.util.List;
@NoArgsConstructor @NoArgsConstructor
public class SchemaElement implements Serializable { public class SchemaElement implements Serializable {
private Long dataSet; private Long dataSetId;
private String dataSetName; private String dataSetName;
private Long model; private Long model;
private Long id; private Long id;
@@ -43,7 +43,7 @@ public class SchemaElement implements Serializable {
return false; return false;
} }
SchemaElement schemaElement = (SchemaElement) o; SchemaElement schemaElement = (SchemaElement) o;
return Objects.equal(dataSet, schemaElement.dataSet) && Objects.equal(id, return Objects.equal(dataSetId, schemaElement.dataSetId) && Objects.equal(id,
schemaElement.id) && Objects.equal(name, schemaElement.name) schemaElement.id) && Objects.equal(name, schemaElement.name)
&& Objects.equal(bizName, schemaElement.bizName) && Objects.equal(bizName, schemaElement.bizName)
&& Objects.equal(type, schemaElement.type); && Objects.equal(type, schemaElement.type);
@@ -51,7 +51,7 @@ public class SchemaElement implements Serializable {
@Override @Override
public int hashCode() { public int hashCode() {
return Objects.hashCode(dataSet, id, name, bizName, type); return Objects.hashCode(dataSetId, id, name, bizName, type);
} }
} }

View File

@@ -1,5 +1,8 @@
package com.tencent.supersonic.headless.api.pojo; package com.tencent.supersonic.headless.api.pojo;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import com.tencent.supersonic.common.pojo.DateConf; import com.tencent.supersonic.common.pojo.DateConf;
import com.tencent.supersonic.common.pojo.Order; import com.tencent.supersonic.common.pojo.Order;
import com.tencent.supersonic.common.pojo.enums.AggregateTypeEnum; import com.tencent.supersonic.common.pojo.enums.AggregateTypeEnum;
@@ -8,14 +11,10 @@ import com.tencent.supersonic.common.pojo.enums.QueryType;
import com.tencent.supersonic.headless.api.pojo.request.QueryFilter; import com.tencent.supersonic.headless.api.pojo.request.QueryFilter;
import lombok.Data; import lombok.Data;
import java.util.ArrayList;
import java.util.Comparator; import java.util.Comparator;
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.TreeSet;
@Data @Data
public class SemanticParseInfo { public class SemanticParseInfo {
@@ -23,24 +22,25 @@ public class SemanticParseInfo {
private Integer id; private Integer id;
private String queryMode = "PLAIN_TEXT"; private String queryMode = "PLAIN_TEXT";
private SchemaElement dataSet; private SchemaElement dataSet;
private Set<SchemaElement> metrics = new TreeSet<>(new SchemaNameLengthComparator()); private Set<SchemaElement> metrics = Sets.newTreeSet(new SchemaNameLengthComparator());
private Set<SchemaElement> dimensions = new LinkedHashSet(); private Set<SchemaElement> dimensions = Sets.newTreeSet(new SchemaNameLengthComparator());
private SchemaElement entity; private SchemaElement entity;
private AggregateTypeEnum aggType = AggregateTypeEnum.NONE; private AggregateTypeEnum aggType = AggregateTypeEnum.NONE;
private FilterType filterType = FilterType.AND; private FilterType filterType = FilterType.AND;
private Set<QueryFilter> dimensionFilters = new LinkedHashSet(); private Set<QueryFilter> dimensionFilters = Sets.newHashSet();
private Set<QueryFilter> metricFilters = new LinkedHashSet(); private Set<QueryFilter> metricFilters = Sets.newHashSet();
private Set<Order> orders = new LinkedHashSet(); private Set<Order> orders = Sets.newHashSet();
private DateConf dateInfo; private DateConf dateInfo;
private Long limit; private Long limit;
private double score; private double score;
private List<SchemaElementMatch> elementMatches = new ArrayList<>(); private List<SchemaElementMatch> elementMatches = Lists.newArrayList();
private Map<String, Object> properties = new HashMap<>();
private SqlInfo sqlInfo = new SqlInfo(); private SqlInfo sqlInfo = new SqlInfo();
private SqlEvaluation sqlEvaluation = new SqlEvaluation(); private SqlEvaluation sqlEvaluation = new SqlEvaluation();
private QueryType queryType = QueryType.ID; private QueryType queryType = QueryType.ID;
private EntityInfo entityInfo; private EntityInfo entityInfo;
private String textInfo; private String textInfo;
private Map<String, Object> properties = Maps.newHashMap();
private static class SchemaNameLengthComparator implements Comparator<SchemaElement> { private static class SchemaNameLengthComparator implements Comparator<SchemaElement> {
@Override @Override
@@ -62,18 +62,11 @@ public class SemanticParseInfo {
} }
} }
public Set<SchemaElement> getMetrics() {
Set<SchemaElement> metricSet = new TreeSet<>(new SchemaNameLengthComparator());
metricSet.addAll(metrics);
metrics = metricSet;
return metrics;
}
public Long getDataSetId() { public Long getDataSetId() {
if (dataSet == null) { if (dataSet == null) {
return null; return null;
} }
return dataSet.getDataSet(); return dataSet.getDataSetId();
} }
} }

View File

@@ -116,7 +116,7 @@ public class SemanticSchema implements Serializable {
public List<SchemaElement> getTags(Long dataSetId) { public List<SchemaElement> getTags(Long dataSetId) {
List<SchemaElement> tags = new ArrayList<>(); List<SchemaElement> tags = new ArrayList<>();
dataSetSchemaList.stream().filter(schemaElement -> dataSetSchemaList.stream().filter(schemaElement ->
dataSetId.equals(schemaElement.getDataSet().getDataSet())) dataSetId.equals(schemaElement.getDataSet().getDataSetId()))
.forEach(d -> tags.addAll(d.getTags())); .forEach(d -> tags.addAll(d.getTags()));
return tags; return tags;
} }
@@ -129,7 +129,7 @@ public class SemanticSchema implements Serializable {
private List<SchemaElement> getElementsByDataSetId(Long dataSetId, List<SchemaElement> elements) { private List<SchemaElement> getElementsByDataSetId(Long dataSetId, List<SchemaElement> elements) {
return elements.stream() return elements.stream()
.filter(schemaElement -> dataSetId.equals(schemaElement.getDataSet())) .filter(schemaElement -> dataSetId.equals(schemaElement.getDataSetId()))
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
@@ -155,6 +155,6 @@ public class SemanticSchema implements Serializable {
return new HashMap<>(); return new HashMap<>();
} }
return dataSetSchemaList.stream().collect(Collectors.toMap(dataSetSchema return dataSetSchemaList.stream().collect(Collectors.toMap(dataSetSchema
-> dataSetSchema.getDataSet().getDataSet(), dataSetSchema -> dataSetSchema)); -> dataSetSchema.getDataSet().getDataSetId(), dataSetSchema -> dataSetSchema));
} }
} }

View File

@@ -6,8 +6,11 @@ import lombok.Data;
@Data @Data
public class MapResp { public class MapResp {
private String queryText; private final String queryText;
private SchemaMapInfo mapInfo = new SchemaMapInfo(); private SchemaMapInfo mapInfo = new SchemaMapInfo();
public MapResp(String queryText) {
this.queryText = queryText;
}
} }

View File

@@ -10,7 +10,7 @@ import java.util.stream.Collectors;
@Data @Data
public class ParseResp { public class ParseResp {
private String queryText; private final String queryText;
private Long queryId; private Long queryId;
private ParseState state = ParseState.PENDING; private ParseState state = ParseState.PENDING;
private String errorMsg; private String errorMsg;

View File

@@ -44,6 +44,7 @@ public class ChatQueryContext {
private QueryFilters queryFilters; private QueryFilters queryFilters;
private List<SemanticQuery> candidateQueries = new ArrayList<>(); private List<SemanticQuery> candidateQueries = new ArrayList<>();
private SchemaMapInfo mapInfo = new SchemaMapInfo(); private SchemaMapInfo mapInfo = new SchemaMapInfo();
private SemanticParseInfo contextParseInfo;
private MapModeEnum mapModeEnum = MapModeEnum.STRICT; private MapModeEnum mapModeEnum = MapModeEnum.STRICT;
@JsonIgnore @JsonIgnore
private SemanticSchema semanticSchema; private SemanticSchema semanticSchema;
@@ -53,7 +54,6 @@ public class ChatQueryContext {
private ChatModelConfig modelConfig; private ChatModelConfig modelConfig;
private PromptConfig promptConfig; private PromptConfig promptConfig;
private List<Text2SQLExemplar> dynamicExemplars; private List<Text2SQLExemplar> dynamicExemplars;
private SemanticParseInfo contextParseInfo;
public List<SemanticQuery> getCandidateQueries() { public List<SemanticQuery> getCandidateQueries() {
ParserConfig parserConfig = ContextUtils.getBean(ParserConfig.class); ParserConfig parserConfig = ContextUtils.getBean(ParserConfig.class);

View File

@@ -51,7 +51,7 @@ public abstract class BaseSemanticCorrector implements SemanticCorrector {
// support fieldName and field alias // support fieldName and field alias
Map<String, String> result = dbAllFields.stream() Map<String, String> result = dbAllFields.stream()
.filter(entry -> dataSetId.equals(entry.getDataSet())) .filter(entry -> dataSetId.equals(entry.getDataSetId()))
.flatMap(schemaElement -> { .flatMap(schemaElement -> {
Set<String> elements = new HashSet<>(); Set<String> elements = new HashSet<>();
elements.add(schemaElement.getName()); elements.add(schemaElement.getName());
@@ -75,7 +75,7 @@ public abstract class BaseSemanticCorrector implements SemanticCorrector {
protected void addAggregateToMetric(ChatQueryContext chatQueryContext, SemanticParseInfo semanticParseInfo) { protected void addAggregateToMetric(ChatQueryContext chatQueryContext, SemanticParseInfo semanticParseInfo) {
//add aggregate to all metric //add aggregate to all metric
String correctS2SQL = semanticParseInfo.getSqlInfo().getCorrectedS2SQL(); String correctS2SQL = semanticParseInfo.getSqlInfo().getCorrectedS2SQL();
Long dataSetId = semanticParseInfo.getDataSet().getDataSet(); Long dataSetId = semanticParseInfo.getDataSet().getDataSetId();
List<SchemaElement> metrics = getMetricElements(chatQueryContext, dataSetId); List<SchemaElement> metrics = getMetricElements(chatQueryContext, dataSetId);
Map<String, String> metricToAggregate = metrics.stream() Map<String, String> metricToAggregate = metrics.stream()

View File

@@ -39,7 +39,7 @@ public class HavingCorrector extends BaseSemanticCorrector {
} }
private void addHaving(ChatQueryContext chatQueryContext, SemanticParseInfo semanticParseInfo) { private void addHaving(ChatQueryContext chatQueryContext, SemanticParseInfo semanticParseInfo) {
Long dataSet = semanticParseInfo.getDataSet().getDataSet(); Long dataSet = semanticParseInfo.getDataSet().getDataSetId();
SemanticSchema semanticSchema = chatQueryContext.getSemanticSchema(); SemanticSchema semanticSchema = chatQueryContext.getSemanticSchema();

View File

@@ -31,7 +31,7 @@ public class ModelWordBuilder extends BaseWordWithAliasBuilder {
public DictWord getOneWordNature(String word, SchemaElement schemaElement, boolean isSuffix) { public DictWord getOneWordNature(String word, SchemaElement schemaElement, boolean isSuffix) {
DictWord dictWord = new DictWord(); DictWord dictWord = new DictWord();
dictWord.setWord(word); dictWord.setWord(word);
String nature = DictWordType.NATURE_SPILT + schemaElement.getDataSet(); String nature = DictWordType.NATURE_SPILT + schemaElement.getDataSetId();
dictWord.setNatureWithFrequency(String.format("%s " + DEFAULT_FREQUENCY, nature)); dictWord.setNatureWithFrequency(String.format("%s " + DEFAULT_FREQUENCY, nature));
return dictWord; return dictWord;
} }

View File

@@ -30,7 +30,7 @@ public class TermWordBuilder extends BaseWordWithAliasBuilder {
public DictWord getOneWordNature(String word, SchemaElement schemaElement, boolean isSuffix) { public DictWord getOneWordNature(String word, SchemaElement schemaElement, boolean isSuffix) {
DictWord dictWord = new DictWord(); DictWord dictWord = new DictWord();
dictWord.setWord(word); dictWord.setWord(word);
Long dataSet = schemaElement.getDataSet(); Long dataSet = schemaElement.getDataSetId();
String nature = DictWordType.NATURE_SPILT + dataSet + DictWordType.NATURE_SPILT + schemaElement.getId() String nature = DictWordType.NATURE_SPILT + dataSet + DictWordType.NATURE_SPILT + schemaElement.getId()
+ DictWordType.TERM.getType(); + DictWordType.TERM.getType();
if (isSuffix) { if (isSuffix) {

View File

@@ -67,7 +67,7 @@ public class DatabaseMatchStrategy extends BaseMatchStrategy<DatabaseMapResult>
Set<SchemaElement> schemaElements = entry.getValue(); Set<SchemaElement> schemaElements = entry.getValue();
if (!CollectionUtils.isEmpty(detectDataSetIds)) { if (!CollectionUtils.isEmpty(detectDataSetIds)) {
schemaElements = schemaElements.stream() schemaElements = schemaElements.stream()
.filter(schemaElement -> detectDataSetIds.contains(schemaElement.getDataSet())) .filter(schemaElement -> detectDataSetIds.contains(schemaElement.getDataSetId()))
.collect(Collectors.toSet()); .collect(Collectors.toSet());
} }
for (SchemaElement schemaElement : schemaElements) { for (SchemaElement schemaElement : schemaElements) {

View File

@@ -103,12 +103,12 @@ public class KeywordMapper extends BaseMapper {
.similarity(mapperHelper.getSimilarity(match.getDetectWord(), schemaElement.getName())) .similarity(mapperHelper.getSimilarity(match.getDetectWord(), schemaElement.getName()))
.build(); .build();
log.info("add to schema, elementMatch {}", schemaElementMatch); log.info("add to schema, elementMatch {}", schemaElementMatch);
addToSchemaMap(chatQueryContext.getMapInfo(), schemaElement.getDataSet(), schemaElementMatch); addToSchemaMap(chatQueryContext.getMapInfo(), schemaElement.getDataSetId(), schemaElementMatch);
} }
} }
private Set<Long> getRegElementSet(SchemaMapInfo schemaMap, SchemaElement schemaElement) { private Set<Long> getRegElementSet(SchemaMapInfo schemaMap, SchemaElement schemaElement) {
List<SchemaElementMatch> elements = schemaMap.getMatchedElements(schemaElement.getDataSet()); List<SchemaElementMatch> elements = schemaMap.getMatchedElements(schemaElement.getDataSetId());
if (CollectionUtils.isEmpty(elements)) { if (CollectionUtils.isEmpty(elements)) {
return new HashSet<>(); return new HashSet<>();
} }

View File

@@ -64,7 +64,7 @@ public class QueryFilterMapper extends BaseMapper {
.name(String.valueOf(filter.getValue())) .name(String.valueOf(filter.getValue()))
.type(SchemaElementType.VALUE) .type(SchemaElementType.VALUE)
.bizName(filter.getBizName()) .bizName(filter.getBizName())
.dataSet(dataSetId) .dataSetId(dataSetId)
.build(); .build();
SchemaElementMatch schemaElementMatch = SchemaElementMatch.builder() SchemaElementMatch schemaElementMatch = SchemaElementMatch.builder()
.element(element) .element(element)

View File

@@ -95,7 +95,7 @@ public abstract class RuleSemanticQuery extends BaseSemanticQuery {
private void fillSchemaElement(SemanticParseInfo parseInfo, SemanticSchema semanticSchema) { private void fillSchemaElement(SemanticParseInfo parseInfo, SemanticSchema semanticSchema) {
Set<Long> dataSetIds = parseInfo.getElementMatches().stream().map(SchemaElementMatch::getElement) Set<Long> dataSetIds = parseInfo.getElementMatches().stream().map(SchemaElementMatch::getElement)
.map(SchemaElement::getDataSet).collect(Collectors.toSet()); .map(SchemaElement::getDataSetId).collect(Collectors.toSet());
Long dataSetId = dataSetIds.iterator().next(); Long dataSetId = dataSetIds.iterator().next();
parseInfo.setDataSet(semanticSchema.getDataSet(dataSetId)); parseInfo.setDataSet(semanticSchema.getDataSet(dataSetId));
Map<Long, List<SchemaElementMatch>> dim2Values = new HashMap<>(); Map<Long, List<SchemaElementMatch>> dim2Values = new HashMap<>();

View File

@@ -24,7 +24,7 @@ class AggCorrectorTest {
ChatQueryContext chatQueryContext = buildQueryContext(dataSetId); ChatQueryContext chatQueryContext = buildQueryContext(dataSetId);
SemanticParseInfo semanticParseInfo = new SemanticParseInfo(); SemanticParseInfo semanticParseInfo = new SemanticParseInfo();
SchemaElement dataSet = new SchemaElement(); SchemaElement dataSet = new SchemaElement();
dataSet.setDataSet(dataSetId); dataSet.setDataSetId(dataSetId);
semanticParseInfo.setDataSet(dataSet); semanticParseInfo.setDataSet(dataSet);
SqlInfo sqlInfo = new SqlInfo(); SqlInfo sqlInfo = new SqlInfo();
String sql = "SELECT 用户, 访问次数 FROM 超音数数据集 WHERE 部门 = 'sales' AND" String sql = "SELECT 用户, 访问次数 FROM 超音数数据集 WHERE 部门 = 'sales' AND"
@@ -47,11 +47,11 @@ class AggCorrectorTest {
QueryConfig queryConfig = new QueryConfig(); QueryConfig queryConfig = new QueryConfig();
dataSetSchema.setQueryConfig(queryConfig); dataSetSchema.setQueryConfig(queryConfig);
SchemaElement schemaElement = new SchemaElement(); SchemaElement schemaElement = new SchemaElement();
schemaElement.setDataSet(dataSetId); schemaElement.setDataSetId(dataSetId);
dataSetSchema.setDataSet(schemaElement); dataSetSchema.setDataSet(schemaElement);
Set<SchemaElement> dimensions = new HashSet<>(); Set<SchemaElement> dimensions = new HashSet<>();
SchemaElement element1 = new SchemaElement(); SchemaElement element1 = new SchemaElement();
element1.setDataSet(1L); element1.setDataSetId(1L);
element1.setName("部门"); element1.setName("部门");
dimensions.add(element1); dimensions.add(element1);
@@ -59,7 +59,7 @@ class AggCorrectorTest {
Set<SchemaElement> metrics = new HashSet<>(); Set<SchemaElement> metrics = new HashSet<>();
SchemaElement metric1 = new SchemaElement(); SchemaElement metric1 = new SchemaElement();
metric1.setDataSet(1L); metric1.setDataSetId(1L);
metric1.setName("访问次数"); metric1.setName("访问次数");
metrics.add(metric1); metrics.add(metric1);

View File

@@ -70,7 +70,7 @@ class SchemaCorrectorTest {
semanticParseInfo.setSqlInfo(sqlInfo); semanticParseInfo.setSqlInfo(sqlInfo);
SchemaElement schemaElement = new SchemaElement(); SchemaElement schemaElement = new SchemaElement();
schemaElement.setDataSet(dataSetId); schemaElement.setDataSetId(dataSetId);
semanticParseInfo.setDataSet(schemaElement); semanticParseInfo.setDataSet(schemaElement);
@@ -107,21 +107,21 @@ class SchemaCorrectorTest {
QueryConfig queryConfig = new QueryConfig(); QueryConfig queryConfig = new QueryConfig();
dataSetSchema.setQueryConfig(queryConfig); dataSetSchema.setQueryConfig(queryConfig);
SchemaElement schemaElement = new SchemaElement(); SchemaElement schemaElement = new SchemaElement();
schemaElement.setDataSet(dataSetId); schemaElement.setDataSetId(dataSetId);
dataSetSchema.setDataSet(schemaElement); dataSetSchema.setDataSet(schemaElement);
Set<SchemaElement> dimensions = new HashSet<>(); Set<SchemaElement> dimensions = new HashSet<>();
SchemaElement element1 = new SchemaElement(); SchemaElement element1 = new SchemaElement();
element1.setDataSet(1L); element1.setDataSetId(1L);
element1.setName("歌曲名"); element1.setName("歌曲名");
dimensions.add(element1); dimensions.add(element1);
SchemaElement element2 = new SchemaElement(); SchemaElement element2 = new SchemaElement();
element2.setDataSet(1L); element2.setDataSetId(1L);
element2.setName("商务组"); element2.setName("商务组");
dimensions.add(element2); dimensions.add(element2);
SchemaElement element3 = new SchemaElement(); SchemaElement element3 = new SchemaElement();
element3.setDataSet(1L); element3.setDataSetId(1L);
element3.setName("发行日期"); element3.setName("发行日期");
dimensions.add(element3); dimensions.add(element3);

View File

@@ -39,7 +39,7 @@ class SelectCorrectorTest {
ChatQueryContext chatQueryContext = buildQueryContext(dataSetId); ChatQueryContext chatQueryContext = buildQueryContext(dataSetId);
SemanticParseInfo semanticParseInfo = new SemanticParseInfo(); SemanticParseInfo semanticParseInfo = new SemanticParseInfo();
SchemaElement dataSet = new SchemaElement(); SchemaElement dataSet = new SchemaElement();
dataSet.setDataSet(dataSetId); dataSet.setDataSetId(dataSetId);
semanticParseInfo.setDataSet(dataSet); semanticParseInfo.setDataSet(dataSet);
semanticParseInfo.setQueryType(QueryType.DETAIL); semanticParseInfo.setQueryType(QueryType.DETAIL);
SqlInfo sqlInfo = new SqlInfo(); SqlInfo sqlInfo = new SqlInfo();
@@ -74,23 +74,23 @@ class SelectCorrectorTest {
dataSetSchema.setQueryConfig(queryConfig); dataSetSchema.setQueryConfig(queryConfig);
SchemaElement schemaElement = new SchemaElement(); SchemaElement schemaElement = new SchemaElement();
schemaElement.setDataSet(dataSetId); schemaElement.setDataSetId(dataSetId);
dataSetSchema.setDataSet(schemaElement); dataSetSchema.setDataSet(schemaElement);
Set<SchemaElement> dimensions = new HashSet<>(); Set<SchemaElement> dimensions = new HashSet<>();
SchemaElement element1 = new SchemaElement(); SchemaElement element1 = new SchemaElement();
element1.setDataSet(dataSetId); element1.setDataSetId(dataSetId);
element1.setId(1L); element1.setId(1L);
element1.setName("艺人名"); element1.setName("艺人名");
dimensions.add(element1); dimensions.add(element1);
SchemaElement element2 = new SchemaElement(); SchemaElement element2 = new SchemaElement();
element2.setDataSet(dataSetId); element2.setDataSetId(dataSetId);
element2.setId(2L); element2.setId(2L);
element2.setName("性别"); element2.setName("性别");
dimensions.add(element2); dimensions.add(element2);
SchemaElement element3 = new SchemaElement(); SchemaElement element3 = new SchemaElement();
element3.setDataSet(dataSetId); element3.setDataSetId(dataSetId);
element3.setId(3L); element3.setId(3L);
element3.setName("国籍"); element3.setName("国籍");
dimensions.add(element3); dimensions.add(element3);
@@ -99,7 +99,7 @@ class SelectCorrectorTest {
Set<SchemaElement> metrics = new HashSet<>(); Set<SchemaElement> metrics = new HashSet<>();
SchemaElement metric1 = new SchemaElement(); SchemaElement metric1 = new SchemaElement();
metric1.setDataSet(dataSetId); metric1.setDataSetId(dataSetId);
metric1.setId(4L); metric1.setId(4L);
metric1.setName("粉丝数"); metric1.setName("粉丝数");
metrics.add(metric1); metrics.add(metric1);

View File

@@ -29,7 +29,7 @@ class LLMSqlParserTest {
SchemaElement schemaElement = SchemaElement.builder() SchemaElement schemaElement = SchemaElement.builder()
.bizName("singer_name") .bizName("singer_name")
.name("歌手名") .name("歌手名")
.dataSet(2L) .dataSetId(2L)
.schemaValueMaps(schemaValueMaps) .schemaValueMaps(schemaValueMaps)
.build(); .build();
dimensions.add(schemaElement); dimensions.add(schemaElement);
@@ -37,7 +37,7 @@ class LLMSqlParserTest {
SchemaElement schemaElement2 = SchemaElement.builder() SchemaElement schemaElement2 = SchemaElement.builder()
.bizName("publish_time") .bizName("publish_time")
.name("发布时间") .name("发布时间")
.dataSet(2L) .dataSetId(2L)
.build(); .build();
dimensions.add(schemaElement2); dimensions.add(schemaElement2);
@@ -47,7 +47,7 @@ class LLMSqlParserTest {
SchemaElement metric = SchemaElement.builder() SchemaElement metric = SchemaElement.builder()
.bizName("play_count") .bizName("play_count")
.name("播放量") .name("播放量")
.dataSet(2L) .dataSetId(2L)
.build(); .build();
metrics.add(metric); metrics.add(metric);

View File

@@ -114,7 +114,7 @@ class S2SqlDateHelperTest {
QueryConfig queryConfig = new QueryConfig(); QueryConfig queryConfig = new QueryConfig();
dataSetSchema.setQueryConfig(queryConfig); dataSetSchema.setQueryConfig(queryConfig);
SchemaElement schemaElement = new SchemaElement(); SchemaElement schemaElement = new SchemaElement();
schemaElement.setDataSet(dataSetId); schemaElement.setDataSetId(dataSetId);
dataSetSchema.setDataSet(schemaElement); dataSetSchema.setDataSet(schemaElement);
dataSetSchemaList.add(dataSetSchema); dataSetSchemaList.add(dataSetSchema);

View File

@@ -111,12 +111,6 @@
</exclusion> </exclusion>
</exclusions> </exclusions>
</dependency> </dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-compress</artifactId>
<version>${commons.compress.version}</version>
<scope>compile</scope>
</dependency>
<dependency> <dependency>
<groupId>org.duckdb</groupId> <groupId>org.duckdb</groupId>
<artifactId>duckdb_jdbc</artifactId> <artifactId>duckdb_jdbc</artifactId>

View File

@@ -33,11 +33,6 @@
<version>${guava.version}</version> <version>${guava.version}</version>
</dependency> </dependency>
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<dependency> <dependency>
<groupId>com.tencent.supersonic</groupId> <groupId>com.tencent.supersonic</groupId>
<artifactId>headless-core</artifactId> <artifactId>headless-core</artifactId>

View File

@@ -1,6 +1,7 @@
package com.tencent.supersonic.headless.server.facade.service.impl; package com.tencent.supersonic.headless.server.facade.service.impl;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import com.tencent.supersonic.auth.api.authentication.pojo.User; import com.tencent.supersonic.auth.api.authentication.pojo.User;
import com.tencent.supersonic.common.pojo.enums.QueryType; import com.tencent.supersonic.common.pojo.enums.QueryType;
import com.tencent.supersonic.common.pojo.enums.TimeDimensionEnum; import com.tencent.supersonic.common.pojo.enums.TimeDimensionEnum;
@@ -26,7 +27,6 @@ import com.tencent.supersonic.headless.chat.ChatQueryContext;
import com.tencent.supersonic.headless.chat.corrector.GrammarCorrector; import com.tencent.supersonic.headless.chat.corrector.GrammarCorrector;
import com.tencent.supersonic.headless.chat.corrector.SchemaCorrector; import com.tencent.supersonic.headless.chat.corrector.SchemaCorrector;
import com.tencent.supersonic.headless.chat.knowledge.builder.BaseWordBuilder; import com.tencent.supersonic.headless.chat.knowledge.builder.BaseWordBuilder;
import com.tencent.supersonic.headless.chat.query.SemanticQuery;
import com.tencent.supersonic.headless.server.facade.service.ChatLayerService; import com.tencent.supersonic.headless.server.facade.service.ChatLayerService;
import com.tencent.supersonic.headless.server.service.RetrieveService; import com.tencent.supersonic.headless.server.service.RetrieveService;
import com.tencent.supersonic.headless.api.pojo.MetaFilter; import com.tencent.supersonic.headless.api.pojo.MetaFilter;
@@ -64,20 +64,17 @@ public class S2ChatLayerService implements ChatLayerService {
@Override @Override
public MapResp performMapping(QueryNLReq queryNLReq) { public MapResp performMapping(QueryNLReq queryNLReq) {
MapResp mapResp = new MapResp(); MapResp mapResp = new MapResp(queryNLReq.getQueryText());
ChatQueryContext queryCtx = buildChatQueryContext(queryNLReq); ChatQueryContext queryCtx = buildChatQueryContext(queryNLReq);
ComponentFactory.getSchemaMappers().forEach(mapper -> { ComponentFactory.getSchemaMappers().forEach(mapper -> {
mapper.map(queryCtx); mapper.map(queryCtx);
}); });
SchemaMapInfo mapInfo = queryCtx.getMapInfo(); mapResp.setMapInfo(queryCtx.getMapInfo());
mapResp.setMapInfo(mapInfo);
mapResp.setQueryText(queryNLReq.getQueryText());
return mapResp; return mapResp;
} }
@Override @Override
public MapInfoResp map(QueryMapReq queryMapReq) { public MapInfoResp map(QueryMapReq queryMapReq) {
QueryNLReq queryNLReq = new QueryNLReq(); QueryNLReq queryNLReq = new QueryNLReq();
BeanUtils.copyProperties(queryMapReq, queryNLReq); BeanUtils.copyProperties(queryMapReq, queryNLReq);
List<DataSetResp> dataSets = dataSetService.getDataSets(queryMapReq.getDataSetNames(), queryMapReq.getUser()); List<DataSetResp> dataSets = dataSetService.getDataSets(queryMapReq.getDataSetNames(), queryMapReq.getUser());
@@ -92,19 +89,13 @@ public class S2ChatLayerService implements ChatLayerService {
@Override @Override
public ParseResp performParsing(QueryNLReq queryNLReq) { public ParseResp performParsing(QueryNLReq queryNLReq) {
ParseResp parseResult = new ParseResp(queryNLReq.getQueryText()); ParseResp parseResult = new ParseResp(queryNLReq.getQueryText());
// build queryContext
ChatQueryContext queryCtx = buildChatQueryContext(queryNLReq); ChatQueryContext queryCtx = buildChatQueryContext(queryNLReq);
chatWorkflowEngine.execute(queryCtx, parseResult); chatWorkflowEngine.execute(queryCtx, parseResult);
List<SemanticParseInfo> parseInfos = queryCtx.getCandidateQueries().stream()
.map(SemanticQuery::getParseInfo).collect(Collectors.toList());
parseResult.setSelectedParses(parseInfos);
return parseResult; return parseResult;
} }
public ChatQueryContext buildChatQueryContext(QueryNLReq queryNLReq) { private ChatQueryContext buildChatQueryContext(QueryNLReq queryNLReq) {
SemanticSchema semanticSchema = schemaService.getSemanticSchema(); SemanticSchema semanticSchema = schemaService.getSemanticSchema(queryNLReq.getDataSetIds());
Map<Long, List<Long>> modelIdToDataSetIds = dataSetService.getModelIdToDataSetIds(); Map<Long, List<Long>> modelIdToDataSetIds = dataSetService.getModelIdToDataSetIds();
ChatQueryContext queryCtx = ChatQueryContext.builder() ChatQueryContext queryCtx = ChatQueryContext.builder()
.queryFilters(queryNLReq.getQueryFilters()) .queryFilters(queryNLReq.getQueryFilters())
@@ -138,7 +129,8 @@ public class S2ChatLayerService implements ChatLayerService {
private SemanticParseInfo correctSqlReq(QuerySqlReq querySqlReq, User user) { private SemanticParseInfo correctSqlReq(QuerySqlReq querySqlReq, User user) {
ChatQueryContext queryCtx = new ChatQueryContext(); ChatQueryContext queryCtx = new ChatQueryContext();
SemanticSchema semanticSchema = schemaService.getSemanticSchema(); SemanticSchema semanticSchema = schemaService.getSemanticSchema(
Sets.newHashSet(querySqlReq.getDataSetId()));
queryCtx.setSemanticSchema(semanticSchema); queryCtx.setSemanticSchema(semanticSchema);
SemanticParseInfo semanticParseInfo = new SemanticParseInfo(); SemanticParseInfo semanticParseInfo = new SemanticParseInfo();
SqlInfo sqlInfo = new SqlInfo(); SqlInfo sqlInfo = new SqlInfo();
@@ -277,7 +269,7 @@ public class S2ChatLayerService implements ChatLayerService {
* @return * @return
*/ */
private SchemaElementMatch getTimeDimension(Long dataSetId, String dataSetName) { private SchemaElementMatch getTimeDimension(Long dataSetId, String dataSetName) {
SchemaElement element = SchemaElement.builder().dataSet(dataSetId).dataSetName(dataSetName) SchemaElement element = SchemaElement.builder().dataSetId(dataSetId).dataSetName(dataSetName)
.type(SchemaElementType.DIMENSION).bizName(TimeDimensionEnum.DAY.getName()).build(); .type(SchemaElementType.DIMENSION).bizName(TimeDimensionEnum.DAY.getName()).build();
SchemaElementMatch timeDimensionMatch = SchemaElementMatch.builder().element(element) SchemaElementMatch timeDimensionMatch = SchemaElementMatch.builder().element(element)

View File

@@ -82,7 +82,7 @@ import java.util.stream.Collectors;
@Slf4j @Slf4j
public class S2SemanticLayerService implements SemanticLayerService { public class S2SemanticLayerService implements SemanticLayerService {
private StatUtils statUtils; private final StatUtils statUtils;
private final QueryUtils queryUtils; private final QueryUtils queryUtils;
private final QueryReqConverter queryReqConverter; private final QueryReqConverter queryReqConverter;
private final SemanticSchemaManager semanticSchemaManager; private final SemanticSchemaManager semanticSchemaManager;
@@ -93,8 +93,8 @@ public class S2SemanticLayerService implements SemanticLayerService {
private final KnowledgeBaseService knowledgeBaseService; private final KnowledgeBaseService knowledgeBaseService;
private final MetricService metricService; private final MetricService metricService;
private final DimensionService dimensionService; private final DimensionService dimensionService;
private QueryCache queryCache = ComponentFactory.getQueryCache(); private final QueryCache queryCache = ComponentFactory.getQueryCache();
private List<QueryExecutor> queryExecutors = ComponentFactory.getQueryExecutors(); private final List<QueryExecutor> queryExecutors = ComponentFactory.getQueryExecutors();
public S2SemanticLayerService( public S2SemanticLayerService(
StatUtils statUtils, StatUtils statUtils,
@@ -322,7 +322,7 @@ public class S2SemanticLayerService implements SemanticLayerService {
} }
private Set<SchemaElement> getMetrics(EntityInfo modelInfo) { private Set<SchemaElement> getMetrics(EntityInfo modelInfo) {
Set<SchemaElement> metrics = new LinkedHashSet(); Set<SchemaElement> metrics = Sets.newHashSet();
for (DataInfo metricValue : modelInfo.getMetrics()) { for (DataInfo metricValue : modelInfo.getMetrics()) {
SchemaElement metric = new SchemaElement(); SchemaElement metric = new SchemaElement();
BeanUtils.copyProperties(metricValue, metric); BeanUtils.copyProperties(metricValue, metric);
@@ -439,7 +439,7 @@ public class S2SemanticLayerService implements SemanticLayerService {
if (dataSetSchema == null) { if (dataSetSchema == null) {
return entityInfo; return entityInfo;
} }
Long dataSetId = dataSetSchema.getDataSet().getDataSet(); Long dataSetId = dataSetSchema.getDataSet().getDataSetId();
DataSetInfo dataSetInfo = new DataSetInfo(); DataSetInfo dataSetInfo = new DataSetInfo();
dataSetInfo.setItemId(dataSetId.intValue()); dataSetInfo.setItemId(dataSetId.intValue());
dataSetInfo.setName(dataSetSchema.getDataSet().getName()); dataSetInfo.setName(dataSetSchema.getDataSet().getName());
@@ -518,7 +518,7 @@ public class S2SemanticLayerService implements SemanticLayerService {
//add filter //add filter
QueryFilter chatFilter = getQueryFilter(entityInfo); QueryFilter chatFilter = getQueryFilter(entityInfo);
Set<QueryFilter> chatFilters = new LinkedHashSet(); Set<QueryFilter> chatFilters = Sets.newHashSet();
chatFilters.add(chatFilter); chatFilters.add(chatFilter);
semanticParseInfo.setDimensionFilters(chatFilters); semanticParseInfo.setDimensionFilters(chatFilters);

View File

@@ -1,8 +1,7 @@
package com.tencent.supersonic.headless.server.pojo.yaml; package com.tencent.supersonic.headless.server.pojo.yaml;
import com.google.common.collect.Lists;
import lombok.Data; import lombok.Data;
import org.apache.commons.compress.utils.Lists;
import java.util.List; import java.util.List;
@Data @Data

View File

@@ -24,6 +24,7 @@ import com.tencent.supersonic.headless.server.pojo.yaml.MetricYamlTpl;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
public interface SchemaService { public interface SchemaService {
@@ -32,6 +33,8 @@ public interface SchemaService {
SemanticSchema getSemanticSchema(); SemanticSchema getSemanticSchema();
SemanticSchema getSemanticSchema(Set<Long> dataSetIds);
SemanticSchemaResp fetchSemanticSchema(SchemaFilterReq schemaFilterReq); SemanticSchemaResp fetchSemanticSchema(SchemaFilterReq schemaFilterReq);
List<ModelSchemaResp> fetchModelSchemaResps(List<Long> modelIds); List<ModelSchemaResp> fetchModelSchemaResps(List<Long> modelIds);

View File

@@ -64,7 +64,7 @@ public class RetrieveServiceImpl implements RetrieveService {
String queryText = queryNLReq.getQueryText(); String queryText = queryNLReq.getQueryText();
// 1.get meta info // 1.get meta info
SemanticSchema semanticSchemaDb = schemaService.getSemanticSchema(); SemanticSchema semanticSchemaDb = schemaService.getSemanticSchema(queryNLReq.getDataSetIds());
List<SchemaElement> metricsDb = semanticSchemaDb.getMetrics(); List<SchemaElement> metricsDb = semanticSchemaDb.getMetrics();
final Map<Long, String> dataSetIdToName = semanticSchemaDb.getDataSetIdToName(); final Map<Long, String> dataSetIdToName = semanticSchemaDb.getDataSetIdToName();
Map<Long, List<Long>> modelIdToDataSetIds = Map<Long, List<Long>> modelIdToDataSetIds =
@@ -228,7 +228,7 @@ public class RetrieveServiceImpl implements RetrieveService {
return Lists.newArrayList(); return Lists.newArrayList();
} }
return metricsDb.stream() return metricsDb.stream()
.filter(mapDO -> Objects.nonNull(mapDO) && model.equals(mapDO.getDataSet())) .filter(mapDO -> Objects.nonNull(mapDO) && model.equals(mapDO.getDataSetId()))
.sorted(Comparator.comparing(SchemaElement::getUseCnt).reversed()) .sorted(Comparator.comparing(SchemaElement::getUseCnt).reversed())
.flatMap(entry -> { .flatMap(entry -> {
List<String> result = new ArrayList<>(); List<String> result = new ArrayList<>();

View File

@@ -3,6 +3,7 @@ package com.tencent.supersonic.headless.server.service.impl;
import com.google.common.cache.Cache; import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheBuilder;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import com.tencent.supersonic.auth.api.authentication.pojo.User; import com.tencent.supersonic.auth.api.authentication.pojo.User;
import com.tencent.supersonic.common.pojo.ItemDateResp; import com.tencent.supersonic.common.pojo.ItemDateResp;
import com.tencent.supersonic.common.pojo.ModelRela; import com.tencent.supersonic.common.pojo.ModelRela;
@@ -64,6 +65,7 @@ import org.springframework.util.CollectionUtils;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -140,15 +142,15 @@ public class SchemaServiceImpl implements SchemaService {
return fetchDataSetSchema(new DataSetFilterReq(dataSetId)).stream().findFirst().orElse(null); return fetchDataSetSchema(new DataSetFilterReq(dataSetId)).stream().findFirst().orElse(null);
} }
private List<DataSetSchemaResp> fetchDataSetSchema(List<Long> ids) { private List<DataSetSchemaResp> fetchDataSetSchema(Set<Long> ids) {
DataSetFilterReq dataSetFilterReq = new DataSetFilterReq(); DataSetFilterReq dataSetFilterReq = new DataSetFilterReq();
dataSetFilterReq.setDataSetIds(ids); dataSetFilterReq.setDataSetIds(new ArrayList(ids));
return fetchDataSetSchema(dataSetFilterReq); return fetchDataSetSchema(dataSetFilterReq);
} }
@Override @Override
public DataSetSchema getDataSetSchema(Long dataSetId) { public DataSetSchema getDataSetSchema(Long dataSetId) {
List<Long> ids = new ArrayList<>(); Set<Long> ids = Sets.newHashSet();
ids.add(dataSetId); ids.add(dataSetId);
List<DataSetSchemaResp> dataSetSchemaResps = fetchDataSetSchema(ids); List<DataSetSchemaResp> dataSetSchemaResps = fetchDataSetSchema(ids);
if (!CollectionUtils.isEmpty(dataSetSchemaResps)) { if (!CollectionUtils.isEmpty(dataSetSchemaResps)) {
@@ -162,7 +164,7 @@ public class SchemaServiceImpl implements SchemaService {
return null; return null;
} }
public List<DataSetSchema> getDataSetSchema(List<Long> ids) { public List<DataSetSchema> getDataSetSchema(Set<Long> ids) {
List<DataSetSchema> domainSchemaList = new ArrayList<>(); List<DataSetSchema> domainSchemaList = new ArrayList<>();
for (DataSetSchemaResp resp : fetchDataSetSchema(ids)) { for (DataSetSchemaResp resp : fetchDataSetSchema(ids)) {
@@ -174,7 +176,12 @@ public class SchemaServiceImpl implements SchemaService {
@Override @Override
public SemanticSchema getSemanticSchema() { public SemanticSchema getSemanticSchema() {
return new SemanticSchema(getDataSetSchema(new ArrayList<>())); return new SemanticSchema(getDataSetSchema(Collections.EMPTY_SET));
}
@Override
public SemanticSchema getSemanticSchema(Set<Long> dataSetIds) {
return new SemanticSchema(getDataSetSchema(dataSetIds));
} }
public List<DataSetSchemaResp> buildDataSetSchema(DataSetFilterReq filter) { public List<DataSetSchemaResp> buildDataSetSchema(DataSetFilterReq filter) {

View File

@@ -59,6 +59,9 @@ public class ChatWorkflowEngine {
parseResult.setErrorMsg("No semantic queries can be parsed out."); parseResult.setErrorMsg("No semantic queries can be parsed out.");
queryCtx.setChatWorkflowState(ChatWorkflowState.FINISHED); queryCtx.setChatWorkflowState(ChatWorkflowState.FINISHED);
} else { } else {
List<SemanticParseInfo> parseInfos = queryCtx.getCandidateQueries().stream()
.map(SemanticQuery::getParseInfo).collect(Collectors.toList());
parseResult.setSelectedParses(parseInfos);
queryCtx.setChatWorkflowState(ChatWorkflowState.CORRECTING); queryCtx.setChatWorkflowState(ChatWorkflowState.CORRECTING);
} }
break; break;

View File

@@ -31,7 +31,7 @@ public class DataSetSchemaBuilder {
DataSetSchema dataSetSchema = new DataSetSchema(); DataSetSchema dataSetSchema = new DataSetSchema();
dataSetSchema.setQueryConfig(resp.getQueryConfig()); dataSetSchema.setQueryConfig(resp.getQueryConfig());
SchemaElement dataSet = SchemaElement.builder() SchemaElement dataSet = SchemaElement.builder()
.dataSet(resp.getId()) .dataSetId(resp.getId())
.dataSetName(resp.getName()) .dataSetName(resp.getName())
.id(resp.getId()) .id(resp.getId())
.name(resp.getName()) .name(resp.getName())
@@ -71,7 +71,7 @@ public class DataSetSchemaBuilder {
List<String> alias = SchemaItem.getAliasList(metric.getAlias()); List<String> alias = SchemaItem.getAliasList(metric.getAlias());
if (metric.getIsTag() == 1) { if (metric.getIsTag() == 1) {
SchemaElement tagToAdd = SchemaElement.builder() SchemaElement tagToAdd = SchemaElement.builder()
.dataSet(resp.getId()) .dataSetId(resp.getId())
.dataSetName(resp.getName()) .dataSetName(resp.getName())
.model(metric.getModelId()) .model(metric.getModelId())
.id(metric.getId()) .id(metric.getId())
@@ -105,7 +105,7 @@ public class DataSetSchemaBuilder {
} }
if (dim.getIsTag() == 1) { if (dim.getIsTag() == 1) {
SchemaElement tagToAdd = SchemaElement.builder() SchemaElement tagToAdd = SchemaElement.builder()
.dataSet(resp.getId()) .dataSetId(resp.getId())
.dataSetName(resp.getName()) .dataSetName(resp.getName())
.model(dim.getModelId()) .model(dim.getModelId())
.id(dim.getId()) .id(dim.getId())
@@ -130,7 +130,7 @@ public class DataSetSchemaBuilder {
return null; return null;
} }
return SchemaElement.builder() return SchemaElement.builder()
.dataSet(resp.getId()) .dataSetId(resp.getId())
.model(dim.getModelId()) .model(dim.getModelId())
.id(dim.getId()) .id(dim.getId())
.name(dim.getName()) .name(dim.getName())
@@ -155,7 +155,7 @@ public class DataSetSchemaBuilder {
} }
} }
SchemaElement dimToAdd = SchemaElement.builder() SchemaElement dimToAdd = SchemaElement.builder()
.dataSet(resp.getId()) .dataSetId(resp.getId())
.dataSetName(resp.getName()) .dataSetName(resp.getName())
.model(dim.getModelId()) .model(dim.getModelId())
.id(dim.getId()) .id(dim.getId())
@@ -189,7 +189,7 @@ public class DataSetSchemaBuilder {
} }
} }
SchemaElement dimValueToAdd = SchemaElement.builder() SchemaElement dimValueToAdd = SchemaElement.builder()
.dataSet(resp.getId()) .dataSetId(resp.getId())
.dataSetName(resp.getName()) .dataSetName(resp.getName())
.model(dim.getModelId()) .model(dim.getModelId())
.id(dim.getId()) .id(dim.getId())
@@ -213,7 +213,7 @@ public class DataSetSchemaBuilder {
List<String> alias = SchemaItem.getAliasList(metric.getAlias()); List<String> alias = SchemaItem.getAliasList(metric.getAlias());
SchemaElement metricToAdd = SchemaElement.builder() SchemaElement metricToAdd = SchemaElement.builder()
.dataSet(resp.getId()) .dataSetId(resp.getId())
.dataSetName(resp.getName()) .dataSetName(resp.getName())
.model(metric.getModelId()) .model(metric.getModelId())
.id(metric.getId()) .id(metric.getId())
@@ -239,7 +239,7 @@ public class DataSetSchemaBuilder {
for (TermResp termResp : resp.getTermResps()) { for (TermResp termResp : resp.getTermResps()) {
List<String> alias = termResp.getAlias(); List<String> alias = termResp.getAlias();
SchemaElement metricToAdd = SchemaElement.builder() SchemaElement metricToAdd = SchemaElement.builder()
.dataSet(resp.getId()) .dataSetId(resp.getId())
.dataSetName(resp.getName()) .dataSetName(resp.getName())
.model(-1L) .model(-1L)
.id(termResp.getId()) .id(termResp.getId())

View File

@@ -8,7 +8,7 @@ import com.tencent.supersonic.chat.server.service.ChatQueryService;
import com.tencent.supersonic.headless.api.pojo.SchemaElement; import com.tencent.supersonic.headless.api.pojo.SchemaElement;
import com.tencent.supersonic.headless.api.pojo.SemanticParseInfo; import com.tencent.supersonic.headless.api.pojo.SemanticParseInfo;
import com.tencent.supersonic.headless.api.pojo.response.ParseResp; import com.tencent.supersonic.headless.api.pojo.response.ParseResp;
import com.tencent.supersonic.headless.api.pojo.response.QueryResult; import com.tencent.supersonic.chat.api.pojo.response.QueryResult;
import com.tencent.supersonic.headless.api.pojo.response.QueryState; import com.tencent.supersonic.headless.api.pojo.response.QueryState;
import com.tencent.supersonic.util.DataUtils; import com.tencent.supersonic.util.DataUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;

View File

@@ -5,7 +5,7 @@ import com.tencent.supersonic.common.pojo.enums.FilterOperatorEnum;
import com.tencent.supersonic.common.pojo.enums.QueryType; import com.tencent.supersonic.common.pojo.enums.QueryType;
import com.tencent.supersonic.headless.api.pojo.SemanticParseInfo; import com.tencent.supersonic.headless.api.pojo.SemanticParseInfo;
import com.tencent.supersonic.headless.api.pojo.request.QueryFilter; import com.tencent.supersonic.headless.api.pojo.request.QueryFilter;
import com.tencent.supersonic.headless.api.pojo.response.QueryResult; import com.tencent.supersonic.chat.api.pojo.response.QueryResult;
import com.tencent.supersonic.headless.chat.query.rule.metric.MetricFilterQuery; import com.tencent.supersonic.headless.chat.query.rule.metric.MetricFilterQuery;
import com.tencent.supersonic.headless.chat.query.rule.metric.MetricGroupByQuery; import com.tencent.supersonic.headless.chat.query.rule.metric.MetricGroupByQuery;
import com.tencent.supersonic.headless.chat.query.rule.metric.MetricModelQuery; import com.tencent.supersonic.headless.chat.query.rule.metric.MetricModelQuery;
@@ -37,10 +37,7 @@ public class MetricTest extends BaseTest {
expectedResult.setQueryMode(MetricFilterQuery.QUERY_MODE); expectedResult.setQueryMode(MetricFilterQuery.QUERY_MODE);
expectedParseInfo.setAggType(NONE); expectedParseInfo.setAggType(NONE);
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("访问用户数"));
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("访问次数")); expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("访问次数"));
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("人均访问次数"));
expectedParseInfo.getDimensionFilters().add(DataUtils.getFilter("user_name", expectedParseInfo.getDimensionFilters().add(DataUtils.getFilter("user_name",
FilterOperatorEnum.EQUALS, "alice", "用户", 2L)); FilterOperatorEnum.EQUALS, "alice", "用户", 2L));
@@ -50,9 +47,9 @@ public class MetricTest extends BaseTest {
assertQueryResult(expectedResult, actualResult); assertQueryResult(expectedResult, actualResult);
} }
@Test //@Test
public void testMetricDomain() throws Exception { public void testMetricDomain() throws Exception {
QueryResult actualResult = submitNewChat("超音数访问次数", DataUtils.metricAgentId); QueryResult actualResult = submitNewChat("超音数访问次数", DataUtils.metricAgentId);
QueryResult expectedResult = new QueryResult(); QueryResult expectedResult = new QueryResult();
SemanticParseInfo expectedParseInfo = new SemanticParseInfo(); SemanticParseInfo expectedParseInfo = new SemanticParseInfo();
@@ -61,7 +58,6 @@ public class MetricTest extends BaseTest {
expectedResult.setQueryMode(MetricModelQuery.QUERY_MODE); expectedResult.setQueryMode(MetricModelQuery.QUERY_MODE);
expectedParseInfo.setAggType(NONE); expectedParseInfo.setAggType(NONE);
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("访问次数")); expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("访问次数"));
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("人均访问次数"));
expectedParseInfo.setDateInfo(DataUtils.getDateConf(DateConf.DateMode.RECENT, unit, period, startDay, endDay)); expectedParseInfo.setDateInfo(DataUtils.getDateConf(DateConf.DateMode.RECENT, unit, period, startDay, endDay));
expectedParseInfo.setQueryType(QueryType.METRIC); expectedParseInfo.setQueryType(QueryType.METRIC);
@@ -80,7 +76,6 @@ public class MetricTest extends BaseTest {
expectedParseInfo.setAggType(NONE); expectedParseInfo.setAggType(NONE);
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("访问次数")); expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("访问次数"));
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("人均访问次数"));
expectedParseInfo.getDimensions().add(DataUtils.getSchemaElement("部门")); expectedParseInfo.getDimensions().add(DataUtils.getSchemaElement("部门"));
expectedParseInfo.setDateInfo(DataUtils.getDateConf(DateConf.DateMode.RECENT, unit, period, startDay, endDay)); expectedParseInfo.setDateInfo(DataUtils.getDateConf(DateConf.DateMode.RECENT, unit, period, startDay, endDay));
@@ -100,7 +95,7 @@ public class MetricTest extends BaseTest {
expectedResult.setQueryMode(MetricFilterQuery.QUERY_MODE); expectedResult.setQueryMode(MetricFilterQuery.QUERY_MODE);
expectedParseInfo.setAggType(NONE); expectedParseInfo.setAggType(NONE);
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("访问次数")); expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("访问次数"));
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("人均访问次数")); expectedParseInfo.getDimensions().add(DataUtils.getSchemaElement("用户"));
List<String> list = new ArrayList<>(); List<String> list = new ArrayList<>();
list.add("alice"); list.add("alice");
list.add("lucy"); list.add("lucy");
@@ -125,9 +120,7 @@ public class MetricTest extends BaseTest {
expectedResult.setQueryMode(MetricTopNQuery.QUERY_MODE); expectedResult.setQueryMode(MetricTopNQuery.QUERY_MODE);
expectedParseInfo.setAggType(SUM); expectedParseInfo.setAggType(SUM);
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("访问用户数"));
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("访问次数")); expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("访问次数"));
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("人均访问次数"));
expectedParseInfo.getDimensions().add(DataUtils.getSchemaElement("用户")); expectedParseInfo.getDimensions().add(DataUtils.getSchemaElement("用户"));
expectedParseInfo.setDateInfo(DataUtils.getDateConf(3, DateConf.DateMode.RECENT, "DAY")); expectedParseInfo.setDateInfo(DataUtils.getDateConf(3, DateConf.DateMode.RECENT, "DAY"));
@@ -147,7 +140,6 @@ public class MetricTest extends BaseTest {
expectedParseInfo.setAggType(SUM); expectedParseInfo.setAggType(SUM);
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("访问次数")); expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("访问次数"));
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("人均访问次数"));
expectedParseInfo.getDimensions().add(DataUtils.getSchemaElement("部门")); expectedParseInfo.getDimensions().add(DataUtils.getSchemaElement("部门"));
expectedParseInfo.setDateInfo(DataUtils.getDateConf(DateConf.DateMode.RECENT, unit, period, startDay, endDay)); expectedParseInfo.setDateInfo(DataUtils.getDateConf(DateConf.DateMode.RECENT, unit, period, startDay, endDay));
@@ -172,7 +164,6 @@ public class MetricTest extends BaseTest {
expectedParseInfo.setAggType(NONE); expectedParseInfo.setAggType(NONE);
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("访问次数")); expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("访问次数"));
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("人均访问次数"));
expectedParseInfo.getDimensionFilters().add(DataUtils.getFilter("user_name", expectedParseInfo.getDimensionFilters().add(DataUtils.getFilter("user_name",
FilterOperatorEnum.EQUALS, "alice", "用户", 2L)); FilterOperatorEnum.EQUALS, "alice", "用户", 2L));

View File

@@ -4,7 +4,7 @@ import com.tencent.supersonic.common.pojo.DateConf;
import com.tencent.supersonic.common.pojo.enums.FilterOperatorEnum; import com.tencent.supersonic.common.pojo.enums.FilterOperatorEnum;
import com.tencent.supersonic.common.pojo.enums.QueryType; import com.tencent.supersonic.common.pojo.enums.QueryType;
import com.tencent.supersonic.headless.api.pojo.SemanticParseInfo; import com.tencent.supersonic.headless.api.pojo.SemanticParseInfo;
import com.tencent.supersonic.headless.api.pojo.response.QueryResult; import com.tencent.supersonic.chat.api.pojo.response.QueryResult;
import com.tencent.supersonic.headless.chat.query.rule.metric.MetricFilterQuery; import com.tencent.supersonic.headless.chat.query.rule.metric.MetricFilterQuery;
import com.tencent.supersonic.util.DataUtils; import com.tencent.supersonic.util.DataUtils;
import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Order;
@@ -27,9 +27,7 @@ public class MultiTurnsTest extends BaseTest {
expectedResult.setQueryMode(MetricFilterQuery.QUERY_MODE); expectedResult.setQueryMode(MetricFilterQuery.QUERY_MODE);
expectedParseInfo.setAggType(NONE); expectedParseInfo.setAggType(NONE);
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("访问用户数"));
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("访问次数")); expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("访问次数"));
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("人均访问次数"));
expectedParseInfo.getDimensionFilters().add(DataUtils.getFilter("user_name", expectedParseInfo.getDimensionFilters().add(DataUtils.getFilter("user_name",
FilterOperatorEnum.EQUALS, "alice", "用户", 2L)); FilterOperatorEnum.EQUALS, "alice", "用户", 2L));

View File

@@ -7,7 +7,7 @@ import com.tencent.supersonic.common.pojo.enums.QueryType;
import com.tencent.supersonic.headless.api.pojo.SchemaElement; import com.tencent.supersonic.headless.api.pojo.SchemaElement;
import com.tencent.supersonic.headless.api.pojo.SemanticParseInfo; import com.tencent.supersonic.headless.api.pojo.SemanticParseInfo;
import com.tencent.supersonic.headless.api.pojo.request.QueryFilter; import com.tencent.supersonic.headless.api.pojo.request.QueryFilter;
import com.tencent.supersonic.headless.api.pojo.response.QueryResult; import com.tencent.supersonic.chat.api.pojo.response.QueryResult;
import com.tencent.supersonic.headless.chat.query.rule.detail.DetailFilterQuery; import com.tencent.supersonic.headless.chat.query.rule.detail.DetailFilterQuery;
import com.tencent.supersonic.util.DataUtils; import com.tencent.supersonic.util.DataUtils;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@@ -9,7 +9,7 @@ import com.tencent.supersonic.chat.server.agent.AgentToolType;
import com.tencent.supersonic.chat.server.agent.MultiTurnConfig; import com.tencent.supersonic.chat.server.agent.MultiTurnConfig;
import com.tencent.supersonic.chat.server.agent.RuleParserTool; import com.tencent.supersonic.chat.server.agent.RuleParserTool;
import com.tencent.supersonic.common.pojo.ChatModelConfig; import com.tencent.supersonic.common.pojo.ChatModelConfig;
import com.tencent.supersonic.headless.api.pojo.response.QueryResult; import com.tencent.supersonic.chat.api.pojo.response.QueryResult;
import com.tencent.supersonic.util.DataUtils; import com.tencent.supersonic.util.DataUtils;
import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Disabled;

View File

@@ -56,7 +56,7 @@
<dozer.verson>7.0.0</dozer.verson> <dozer.verson>7.0.0</dozer.verson>
<httpmime.version>4.5.6</httpmime.version> <httpmime.version>4.5.6</httpmime.version>
<transmittable.version>2.12.1</transmittable.version> <transmittable.version>2.12.1</transmittable.version>
<commons.compress.version>1.21</commons.compress.version> <commons.compress.version>1.26.0</commons.compress.version>
<jetty.util.version>6.1.26</jetty.util.version> <jetty.util.version>6.1.26</jetty.util.version>
<!--<spring.version>2.7.2</spring.version>--> <!--<spring.version>2.7.2</spring.version>-->
<jsonpath.version>2.8.0</jsonpath.version> <jsonpath.version>2.8.0</jsonpath.version>