mirror of
https://github.com/tencentmusic/supersonic.git
synced 2025-12-11 20:25:12 +00:00
[improvement][headless]Optimize code structure and code style.
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
@@ -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 {
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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<>();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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<>();
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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<>();
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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())
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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));
|
||||||
|
|
||||||
|
|||||||
@@ -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));
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
2
pom.xml
2
pom.xml
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user