mirror of
https://github.com/tencentmusic/supersonic.git
synced 2026-04-25 00:54:21 +08:00
[improvement][project] supersonic 0.7.0 version backend update (#20)
Co-authored-by: kanedai <kanedai@tencent.com>
This commit is contained in:
@@ -0,0 +1,112 @@
|
||||
package com.tencent.supersonic.integration;
|
||||
|
||||
import com.tencent.supersonic.StandaloneLauncher;
|
||||
import com.tencent.supersonic.auth.api.authentication.pojo.User;
|
||||
import com.tencent.supersonic.chat.api.pojo.ChatContext;
|
||||
import com.tencent.supersonic.chat.api.pojo.SchemaElement;
|
||||
import com.tencent.supersonic.chat.api.pojo.SemanticParseInfo;
|
||||
import com.tencent.supersonic.chat.api.pojo.request.QueryRequest;
|
||||
import com.tencent.supersonic.chat.api.pojo.response.QueryResult;
|
||||
import com.tencent.supersonic.chat.api.pojo.response.QueryState;
|
||||
import com.tencent.supersonic.chat.service.ChatService;
|
||||
import com.tencent.supersonic.chat.service.ConfigService;
|
||||
import com.tencent.supersonic.chat.service.QueryService;
|
||||
import com.tencent.supersonic.common.pojo.DateConf;
|
||||
import com.tencent.supersonic.util.DataUtils;
|
||||
import org.apache.commons.lang3.RandomStringUtils;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.test.context.ActiveProfiles;
|
||||
import org.springframework.test.context.junit4.SpringRunner;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.Comparator;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest(classes = StandaloneLauncher.class)
|
||||
@ActiveProfiles("local")
|
||||
public class BaseQueryTest {
|
||||
|
||||
protected final int unit = 7;
|
||||
protected final String startDay = LocalDate.now().plusDays(-unit).toString();
|
||||
protected final String endDay = LocalDate.now().plusDays(-1).toString();
|
||||
|
||||
@Autowired
|
||||
@Qualifier("chatQueryService")
|
||||
protected QueryService queryService;
|
||||
@Autowired
|
||||
protected ChatService chatService;
|
||||
@Autowired
|
||||
protected ConfigService configService;
|
||||
|
||||
protected Integer getNewChat(String chatName) {
|
||||
chatService.addChat(User.getFakeUser(), chatName);
|
||||
Optional<Long> chatId = chatService.getAll(User.getFakeUser().getName()).stream().map(c -> c.getChatId()).sorted(Comparator.reverseOrder()).findFirst();
|
||||
if (chatId.isPresent()) {
|
||||
return chatId.get().intValue();
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
protected QueryResult submitMultiTurnChat(String queryText) throws Exception {
|
||||
QueryRequest queryContextReq = DataUtils.getQueryContextReq(20, queryText);
|
||||
return queryService.executeQuery(queryContextReq);
|
||||
}
|
||||
|
||||
protected QueryResult submitNewChat(String queryText) throws Exception {
|
||||
chatService.addChat(User.getFakeUser(), RandomStringUtils.random(5));
|
||||
|
||||
ChatContext chatContext = chatService.getOrCreateContext(10);
|
||||
chatContext.setParseInfo(new SemanticParseInfo());
|
||||
chatService.updateContext(chatContext);
|
||||
|
||||
QueryRequest queryContextReq = DataUtils.getQueryContextReq(10, queryText);
|
||||
return queryService.executeQuery(queryContextReq);
|
||||
}
|
||||
|
||||
protected void assertSchemaElements(Set<SchemaElement> expected, Set<SchemaElement> actual) {
|
||||
Set<String> expectedNames = expected.stream().map(s -> s.getName())
|
||||
.filter(s -> s != null).collect(Collectors.toSet());
|
||||
Set<String> actualNames = actual.stream().map(s -> s.getName())
|
||||
.filter(s -> s != null).collect(Collectors.toSet());
|
||||
|
||||
assertEquals(expectedNames, actualNames);
|
||||
}
|
||||
|
||||
protected void assertDateConf(DateConf expected, DateConf actual) {
|
||||
Boolean timeFilterExist = expected.getStartDate().equals(actual.getStartDate())
|
||||
&& expected.getEndDate().equals(actual.getEndDate())
|
||||
&& expected.getDateMode().equals(actual.getDateMode())
|
||||
|| expected.getUnit().equals(actual.getUnit()) &&
|
||||
expected.getDateMode().equals(actual.getDateMode()) &&
|
||||
expected.getPeriod().equals(actual.getPeriod());
|
||||
|
||||
assertTrue(timeFilterExist);
|
||||
}
|
||||
|
||||
protected void assertQueryResult(QueryResult expected, QueryResult actual) {
|
||||
SemanticParseInfo expectedParseInfo = expected.getChatContext();
|
||||
SemanticParseInfo actualParseInfo = actual.getChatContext();
|
||||
|
||||
assertEquals(QueryState.SUCCESS, actual.getQueryState());
|
||||
assertEquals(expected.getQueryMode(), actual.getQueryMode());
|
||||
assertEquals(expectedParseInfo.getAggType(), actualParseInfo.getAggType());
|
||||
|
||||
assertSchemaElements(expectedParseInfo.getMetrics(), actualParseInfo.getMetrics());
|
||||
assertSchemaElements(expectedParseInfo.getDimensions(), actualParseInfo.getDimensions());
|
||||
|
||||
assertEquals(expectedParseInfo.getDimensionFilters(), actualParseInfo.getDimensionFilters());
|
||||
assertEquals(expectedParseInfo.getMetricFilters(), actualParseInfo.getMetricFilters());
|
||||
|
||||
assertDateConf(expectedParseInfo.getDateInfo(), actualParseInfo.getDateInfo());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
package com.tencent.supersonic.integration;
|
||||
|
||||
import com.tencent.supersonic.chat.api.pojo.SemanticParseInfo;
|
||||
import com.tencent.supersonic.chat.api.pojo.request.QueryFilter;
|
||||
import com.tencent.supersonic.chat.api.pojo.response.QueryResult;
|
||||
import com.tencent.supersonic.chat.query.rule.entity.EntityFilterQuery;
|
||||
import com.tencent.supersonic.common.pojo.DateConf;
|
||||
import com.tencent.supersonic.semantic.api.query.enums.FilterOperatorEnum;
|
||||
import com.tencent.supersonic.util.DataUtils;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static com.tencent.supersonic.common.pojo.enums.AggregateTypeEnum.NONE;
|
||||
|
||||
public class EntityQueryTest extends BaseQueryTest {
|
||||
|
||||
@Test
|
||||
public void queryTest_ENTITY_LIST_FILTER()throws Exception {
|
||||
QueryResult actualResult = submitNewChat("爱情、流行类型的艺人");
|
||||
|
||||
QueryResult expectedResult = new QueryResult();
|
||||
SemanticParseInfo expectedParseInfo = new SemanticParseInfo();
|
||||
expectedResult.setChatContext(expectedParseInfo);
|
||||
|
||||
expectedResult.setQueryMode(EntityFilterQuery.QUERY_MODE);
|
||||
expectedParseInfo.setAggType(NONE);
|
||||
|
||||
List<String> list = new ArrayList<>();
|
||||
list.add("爱情");
|
||||
list.add("流行");
|
||||
QueryFilter dimensionFilter = DataUtils.getFilter("genre", FilterOperatorEnum.IN, list, "风格", 6L);
|
||||
expectedParseInfo.getDimensionFilters().add(dimensionFilter);
|
||||
|
||||
expectedParseInfo.setDateInfo(DataUtils.getDateConf(1, DateConf.DateMode.RECENT_UNITS, "DAY"));
|
||||
expectedParseInfo.setNativeQuery(true);
|
||||
|
||||
assertQueryResult(expectedResult, actualResult);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,220 @@
|
||||
package com.tencent.supersonic.integration;
|
||||
|
||||
import com.tencent.supersonic.auth.api.authentication.pojo.User;
|
||||
import com.tencent.supersonic.chat.api.pojo.SemanticParseInfo;
|
||||
import com.tencent.supersonic.chat.api.pojo.request.QueryFilter;
|
||||
import com.tencent.supersonic.chat.api.pojo.response.QueryResult;
|
||||
import com.tencent.supersonic.chat.config.ChatConfigEditReqReq;
|
||||
import com.tencent.supersonic.chat.config.ChatConfigResp;
|
||||
import com.tencent.supersonic.chat.config.ItemVisibility;
|
||||
import com.tencent.supersonic.chat.query.rule.metric.MetricDomainQuery;
|
||||
import com.tencent.supersonic.chat.query.rule.metric.MetricFilterQuery;
|
||||
import com.tencent.supersonic.chat.query.rule.metric.MetricGroupByQuery;
|
||||
import com.tencent.supersonic.chat.query.rule.metric.MetricTopNQuery;
|
||||
import com.tencent.supersonic.common.pojo.DateConf;
|
||||
import com.tencent.supersonic.semantic.api.query.enums.FilterOperatorEnum;
|
||||
import com.tencent.supersonic.util.DataUtils;
|
||||
import org.junit.Test;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
|
||||
import java.text.DateFormat;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.*;
|
||||
|
||||
import static com.tencent.supersonic.common.pojo.enums.AggregateTypeEnum.*;
|
||||
|
||||
|
||||
public class MetricQueryTest extends BaseQueryTest {
|
||||
|
||||
@Test
|
||||
public void queryTest_METRIC_FILTER() throws Exception {
|
||||
QueryResult actualResult = submitNewChat("alice的访问次数");
|
||||
|
||||
QueryResult expectedResult = new QueryResult();
|
||||
SemanticParseInfo expectedParseInfo = new SemanticParseInfo();
|
||||
expectedResult.setChatContext(expectedParseInfo);
|
||||
|
||||
expectedResult.setQueryMode(MetricFilterQuery.QUERY_MODE);
|
||||
expectedParseInfo.setAggType(NONE);
|
||||
|
||||
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("访问次数"));
|
||||
|
||||
expectedParseInfo.getDimensionFilters().add(DataUtils.getFilter("user_name",
|
||||
FilterOperatorEnum.EQUALS, "alice", "用户名", 2L));
|
||||
|
||||
expectedParseInfo.setDateInfo(DataUtils.getDateConf(DateConf.DateMode.BETWEEN_CONTINUOUS, startDay, endDay));
|
||||
expectedParseInfo.setNativeQuery(false);
|
||||
|
||||
assertQueryResult(expectedResult, actualResult);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void queryTest_METRIC_DOMAIN() throws Exception {
|
||||
QueryResult actualResult = submitNewChat("超音数的访问次数");
|
||||
|
||||
QueryResult expectedResult = new QueryResult();
|
||||
SemanticParseInfo expectedParseInfo = new SemanticParseInfo();
|
||||
expectedResult.setChatContext(expectedParseInfo);
|
||||
|
||||
expectedResult.setQueryMode(MetricDomainQuery.QUERY_MODE);
|
||||
expectedParseInfo.setAggType(NONE);
|
||||
|
||||
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("访问次数"));
|
||||
|
||||
expectedParseInfo.setDateInfo(DataUtils.getDateConf(DateConf.DateMode.BETWEEN_CONTINUOUS, startDay, endDay));
|
||||
expectedParseInfo.setNativeQuery(false);
|
||||
|
||||
assertQueryResult(expectedResult, actualResult);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void queryTest_METRIC_GROUPBY() throws Exception {
|
||||
QueryResult actualResult = submitNewChat("超音数各部门的访问次数");
|
||||
|
||||
QueryResult expectedResult = new QueryResult();
|
||||
SemanticParseInfo expectedParseInfo = new SemanticParseInfo();
|
||||
expectedResult.setChatContext(expectedParseInfo);
|
||||
|
||||
expectedResult.setQueryMode(MetricGroupByQuery.QUERY_MODE);
|
||||
expectedParseInfo.setAggType(NONE);
|
||||
|
||||
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("访问次数"));
|
||||
expectedParseInfo.getDimensions().add(DataUtils.getSchemaElement("部门"));
|
||||
|
||||
expectedParseInfo.setDateInfo(DataUtils.getDateConf(DateConf.DateMode.BETWEEN_CONTINUOUS, startDay, endDay));
|
||||
expectedParseInfo.setNativeQuery(false);
|
||||
|
||||
assertQueryResult(expectedResult, actualResult);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void queryTest_METRIC_FILTER_COMPARE() throws Exception {
|
||||
QueryResult actualResult = submitNewChat("对比alice和lucy的访问次数");
|
||||
|
||||
QueryResult expectedResult = new QueryResult();
|
||||
SemanticParseInfo expectedParseInfo = new SemanticParseInfo();
|
||||
expectedResult.setChatContext(expectedParseInfo);
|
||||
|
||||
expectedResult.setQueryMode(MetricFilterQuery.QUERY_MODE);
|
||||
expectedParseInfo.setAggType(NONE);
|
||||
|
||||
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("访问次数"));
|
||||
|
||||
List<String> list = new ArrayList<>();
|
||||
list.add("alice");
|
||||
list.add("lucy");
|
||||
QueryFilter dimensionFilter = DataUtils.getFilter("user_name", FilterOperatorEnum.IN, list, "用户名", 2L);
|
||||
expectedParseInfo.getDimensionFilters().add(dimensionFilter);
|
||||
|
||||
expectedParseInfo.setDateInfo(DataUtils.getDateConf(DateConf.DateMode.BETWEEN_CONTINUOUS, startDay, endDay));
|
||||
expectedParseInfo.setNativeQuery(false);
|
||||
|
||||
assertQueryResult(expectedResult, actualResult);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void queryTest_METRIC_TOPN() throws Exception {
|
||||
QueryResult actualResult = submitNewChat("近3天访问次数最多的用户");
|
||||
|
||||
QueryResult expectedResult = new QueryResult();
|
||||
SemanticParseInfo expectedParseInfo = new SemanticParseInfo();
|
||||
expectedResult.setChatContext(expectedParseInfo);
|
||||
|
||||
expectedResult.setQueryMode(MetricTopNQuery.QUERY_MODE);
|
||||
expectedParseInfo.setAggType(SUM);
|
||||
|
||||
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("访问次数"));
|
||||
expectedParseInfo.getDimensions().add(DataUtils.getSchemaElement("用户名"));
|
||||
|
||||
expectedParseInfo.setDateInfo(DataUtils.getDateConf(3, DateConf.DateMode.RECENT_UNITS, "DAY"));
|
||||
expectedParseInfo.setNativeQuery(false);
|
||||
|
||||
assertQueryResult(expectedResult, actualResult);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void queryTest_METRIC_GROUPBY_SUM() throws Exception {
|
||||
QueryResult actualResult = submitNewChat("超音数各部门的访问次数总和");
|
||||
QueryResult expectedResult = new QueryResult();
|
||||
SemanticParseInfo expectedParseInfo = new SemanticParseInfo();
|
||||
expectedResult.setChatContext(expectedParseInfo);
|
||||
|
||||
expectedResult.setQueryMode(MetricGroupByQuery.QUERY_MODE);
|
||||
expectedParseInfo.setAggType(SUM);
|
||||
|
||||
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("访问次数"));
|
||||
expectedParseInfo.getDimensions().add(DataUtils.getSchemaElement("部门"));
|
||||
|
||||
expectedParseInfo.setDateInfo(DataUtils.getDateConf(DateConf.DateMode.BETWEEN_CONTINUOUS, startDay, endDay));
|
||||
expectedParseInfo.setNativeQuery(false);
|
||||
|
||||
assertQueryResult(expectedResult, actualResult);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void queryTest_METRIC_FILTER_TIME() throws Exception {
|
||||
DateFormat format = new SimpleDateFormat("yyyy-mm-dd");
|
||||
DateFormat textFormat = new SimpleDateFormat("yyyy年mm月dd日");
|
||||
String dateStr = textFormat.format(format.parse(startDay));
|
||||
|
||||
QueryResult actualResult = submitNewChat(String.format("想知道{}alice的访问次数", dateStr));
|
||||
|
||||
QueryResult expectedResult = new QueryResult();
|
||||
SemanticParseInfo expectedParseInfo = new SemanticParseInfo();
|
||||
expectedResult.setChatContext(expectedParseInfo);
|
||||
|
||||
expectedResult.setQueryMode(MetricFilterQuery.QUERY_MODE);
|
||||
expectedParseInfo.setAggType(NONE);
|
||||
|
||||
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("访问次数"));
|
||||
|
||||
expectedParseInfo.getDimensionFilters().add(DataUtils.getFilter("user_name",
|
||||
FilterOperatorEnum.EQUALS, "alice", "用户名", 2L));
|
||||
|
||||
expectedParseInfo.setDateInfo(DataUtils.getDateConf(DateConf.DateMode.BETWEEN_CONTINUOUS, startDay, startDay));
|
||||
expectedParseInfo.setNativeQuery(false);
|
||||
|
||||
assertQueryResult(expectedResult, actualResult);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void queryTest_CONFIG_VISIBILITY() throws Exception {
|
||||
// 1. round_1 use blacklist
|
||||
ChatConfigResp chatConfig = configService.fetchConfigByDomainId(1L);
|
||||
ChatConfigEditReqReq extendEditCmd = new ChatConfigEditReqReq();
|
||||
BeanUtils.copyProperties(chatConfig, extendEditCmd);
|
||||
// add blacklist
|
||||
List<Long> blackMetrics = Arrays.asList(3L);
|
||||
extendEditCmd.getChatAggConfig().getVisibility().setBlackMetricIdList(blackMetrics);
|
||||
configService.editConfig(extendEditCmd, User.getFakeUser());
|
||||
|
||||
QueryResult actualResult = submitNewChat("超音数访问人数、访问次数");
|
||||
QueryResult expectedResult = new QueryResult();
|
||||
SemanticParseInfo expectedParseInfo = new SemanticParseInfo();
|
||||
expectedResult.setChatContext(expectedParseInfo);
|
||||
|
||||
expectedResult.setQueryMode(MetricDomainQuery.QUERY_MODE);
|
||||
expectedParseInfo.setAggType(NONE);
|
||||
|
||||
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("访问次数"));
|
||||
|
||||
expectedParseInfo.setDateInfo(DataUtils.getDateConf(DateConf.DateMode.BETWEEN_CONTINUOUS, startDay, endDay));
|
||||
expectedParseInfo.setNativeQuery(false);
|
||||
|
||||
assertQueryResult(expectedResult, actualResult);
|
||||
|
||||
// 2. round_2 no blacklist
|
||||
// remove blacklist
|
||||
extendEditCmd.getChatAggConfig().setVisibility(new ItemVisibility());
|
||||
configService.editConfig(extendEditCmd, User.getFakeUser());
|
||||
|
||||
actualResult = submitNewChat("超音数访问人数、访问次数");
|
||||
expectedParseInfo.getMetrics().clear();
|
||||
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("访问次数"));
|
||||
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("访问人数"));
|
||||
|
||||
assertQueryResult(expectedResult, actualResult);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,444 +0,0 @@
|
||||
package com.tencent.supersonic.integration;
|
||||
|
||||
import com.tencent.supersonic.StandaloneLauncher;
|
||||
import com.tencent.supersonic.chat.api.pojo.Filter;
|
||||
import com.tencent.supersonic.chat.api.request.QueryContextReq;
|
||||
import com.tencent.supersonic.chat.api.response.QueryResultResp;
|
||||
import com.tencent.supersonic.chat.application.query.MetricCompare;
|
||||
import com.tencent.supersonic.chat.application.query.MetricDomain;
|
||||
import com.tencent.supersonic.chat.application.query.MetricFilter;
|
||||
import com.tencent.supersonic.chat.application.query.MetricGroupBy;
|
||||
import com.tencent.supersonic.chat.domain.service.QueryService;
|
||||
import com.tencent.supersonic.common.pojo.DateConf;
|
||||
import com.tencent.supersonic.common.pojo.SchemaItem;
|
||||
import com.tencent.supersonic.common.util.json.JsonUtil;
|
||||
import com.tencent.supersonic.semantic.api.query.enums.FilterOperatorEnum;
|
||||
import com.tencent.supersonic.util.DataUtils;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.test.context.ActiveProfiles;
|
||||
import org.springframework.test.context.junit4.SpringRunner;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
|
||||
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest(classes = StandaloneLauncher.class)
|
||||
@ActiveProfiles("local")
|
||||
public class MultiTurnQueryTest {
|
||||
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(MultiTurnQueryTest.class);
|
||||
|
||||
@Autowired
|
||||
@Qualifier("chatQueryService")
|
||||
private QueryService queryService;
|
||||
|
||||
//case:alice的访问次数->停留时长呢?->想知道lucy的,queryMode:METRIC_FILTER
|
||||
@Test
|
||||
public void queryTest1() {
|
||||
QueryContextReq queryContextReq = DataUtils.getQueryContextReq(1,"alice的访问次数");
|
||||
QueryResultResp queryResultResp = new QueryResultResp();
|
||||
try {
|
||||
queryResultResp = queryService.executeQuery(queryContextReq);
|
||||
} catch (Exception e) {
|
||||
|
||||
}
|
||||
LOGGER.info("QueryResultResp queryResultResp:{}", JsonUtil.toString(queryResultResp));
|
||||
//assert queryState
|
||||
Assert.assertEquals(queryResultResp.getQueryState(), 0);
|
||||
//assert queryMode
|
||||
Assert.assertEquals(queryResultResp.getQueryMode(), MetricFilter.QUERY_MODE);
|
||||
//assert aggType
|
||||
Assert.assertEquals(queryResultResp.getChatContext().getAggType(), null);
|
||||
//assert 主题域Id
|
||||
assertThat(queryResultResp.getChatContext().getDomainId()).isEqualTo(1L);
|
||||
|
||||
//assert 指标
|
||||
Set<SchemaItem> metrics = queryResultResp.getChatContext().getMetrics();
|
||||
SchemaItem schemaItemMetric = DataUtils.getSchemaItem(2L, "访问次数", "pv");
|
||||
Boolean metricExist = DataUtils.compareSchemaItem(metrics, schemaItemMetric);
|
||||
assertThat(metricExist).isEqualTo(true);
|
||||
|
||||
//assert 维度
|
||||
Set<SchemaItem> dimensions = queryResultResp.getChatContext().getDimensions();
|
||||
Boolean dimensionExist = DataUtils.compareDateDimension(dimensions);
|
||||
assertThat(dimensionExist).isEqualTo(true);
|
||||
|
||||
//assert 维度filter
|
||||
Set<Filter> dimensionFilters = queryResultResp.getChatContext().getDimensionFilters();
|
||||
Filter dimensionFilter = DataUtils.getFilter("user_name", FilterOperatorEnum.EQUALS, "alice", "用户名", 2L);
|
||||
Boolean dimensionFilterExist = DataUtils.compareDimensionFilter(dimensionFilters, dimensionFilter);
|
||||
assertThat(dimensionFilterExist).isEqualTo(true);
|
||||
|
||||
//assert 时间filter
|
||||
DateConf dateInfo = DataUtils.getDateConf(7, DateConf.DateMode.RECENT_UNITS, "DAY");
|
||||
Boolean timeFilterExist = DataUtils.compareDate(queryResultResp.getChatContext().getDateInfo(), dateInfo);
|
||||
assertThat(timeFilterExist).isEqualTo(true);
|
||||
|
||||
//assert nativeQuery
|
||||
assertThat(queryResultResp.getChatContext().getNativeQuery()).isEqualTo(false);
|
||||
|
||||
|
||||
queryContextReq = DataUtils.getQueryContextReq(1,"停留时长呢?");
|
||||
try {
|
||||
queryResultResp = queryService.executeQuery(queryContextReq);
|
||||
} catch (Exception e) {
|
||||
|
||||
}
|
||||
LOGGER.info("QueryResultResp queryResultResp:{}", JsonUtil.toString(queryResultResp));
|
||||
//assert queryState
|
||||
Assert.assertEquals(queryResultResp.getQueryState(), 0);
|
||||
//assert queryMode
|
||||
Assert.assertEquals(queryResultResp.getQueryMode(), MetricFilter.QUERY_MODE);
|
||||
//assert aggType
|
||||
Assert.assertEquals(queryResultResp.getChatContext().getAggType(), null);
|
||||
//assert 主题域Id
|
||||
assertThat(queryResultResp.getChatContext().getDomainId()).isEqualTo(1L);
|
||||
|
||||
//assert 指标
|
||||
Set<SchemaItem> metrics1 = queryResultResp.getChatContext().getMetrics();
|
||||
SchemaItem schemaItemMetric1 = DataUtils.getSchemaItem(1L, "停留时长", "stay_hours");
|
||||
Boolean metricExist1 = DataUtils.compareSchemaItem(metrics1, schemaItemMetric1);
|
||||
assertThat(metricExist1).isEqualTo(true);
|
||||
|
||||
//assert 维度
|
||||
Set<SchemaItem> dimensions1 = queryResultResp.getChatContext().getDimensions();
|
||||
Boolean dimensionExist1 = DataUtils.compareDateDimension(dimensions1);
|
||||
assertThat(dimensionExist1).isEqualTo(true);
|
||||
|
||||
//assert 维度filter
|
||||
Set<Filter> dimensionFilters1 = queryResultResp.getChatContext().getDimensionFilters();
|
||||
Filter dimensionFilter1 = DataUtils.getFilter("user_name", FilterOperatorEnum.EQUALS, "alice", "用户名", 2L);
|
||||
Boolean dimensionFilterExist1 = DataUtils.compareDimensionFilter(dimensionFilters1, dimensionFilter1);
|
||||
assertThat(dimensionFilterExist1).isEqualTo(true);
|
||||
|
||||
//assert 时间filter
|
||||
DateConf dateInfo1 = DataUtils.getDateConf(7, DateConf.DateMode.RECENT_UNITS, "DAY");
|
||||
Boolean timeFilterExist1 = DataUtils.compareDate(queryResultResp.getChatContext().getDateInfo(), dateInfo1);
|
||||
assertThat(timeFilterExist1).isEqualTo(true);
|
||||
|
||||
//assert nativeQuery
|
||||
assertThat(queryResultResp.getChatContext().getNativeQuery()).isEqualTo(false);
|
||||
|
||||
|
||||
queryContextReq = DataUtils.getQueryContextReq(1,"想知道lucy的");
|
||||
try {
|
||||
queryResultResp = queryService.executeQuery(queryContextReq);
|
||||
} catch (Exception e) {
|
||||
|
||||
}
|
||||
LOGGER.info("QueryResultResp queryResultResp:{}", JsonUtil.toString(queryResultResp));
|
||||
//assert queryState
|
||||
Assert.assertEquals(queryResultResp.getQueryState(), 0);
|
||||
//assert queryMode
|
||||
Assert.assertEquals(queryResultResp.getQueryMode(), MetricFilter.QUERY_MODE);
|
||||
//assert aggType
|
||||
Assert.assertEquals(queryResultResp.getChatContext().getAggType(), null);
|
||||
//assert 主题域Id
|
||||
assertThat(queryResultResp.getChatContext().getDomainId()).isEqualTo(1L);
|
||||
|
||||
//assert 指标
|
||||
Set<SchemaItem> metrics2 = queryResultResp.getChatContext().getMetrics();
|
||||
SchemaItem schemaItemMetric2 = DataUtils.getSchemaItem(1L, "停留时长", "stay_hours");
|
||||
Boolean metricExist2 = DataUtils.compareSchemaItem(metrics2, schemaItemMetric2);
|
||||
assertThat(metricExist2).isEqualTo(true);
|
||||
|
||||
//assert 维度
|
||||
Set<SchemaItem> dimensions2 = queryResultResp.getChatContext().getDimensions();
|
||||
Boolean dimensionExist2 = DataUtils.compareDateDimension(dimensions2);
|
||||
assertThat(dimensionExist2).isEqualTo(true);
|
||||
|
||||
//assert 维度filter
|
||||
Set<Filter> dimensionFilters2 = queryResultResp.getChatContext().getDimensionFilters();
|
||||
Filter dimensionFilter2 = DataUtils.getFilter("user_name", FilterOperatorEnum.EQUALS, "lucy", "用户名", 2L);
|
||||
Boolean dimensionFilterExist2 = DataUtils.compareDimensionFilter(dimensionFilters2, dimensionFilter2);
|
||||
;
|
||||
assertThat(dimensionFilterExist2).isEqualTo(true);
|
||||
|
||||
//assert 时间filter
|
||||
DateConf dateInfo2 = DataUtils.getDateConf(7, DateConf.DateMode.RECENT_UNITS, "DAY");
|
||||
Boolean timeFilterExist2 = DataUtils.compareDate(queryResultResp.getChatContext().getDateInfo(), dateInfo2);
|
||||
assertThat(timeFilterExist2).isEqualTo(true);
|
||||
|
||||
//assert nativeQuery
|
||||
assertThat(queryResultResp.getChatContext().getNativeQuery()).isEqualTo(false);
|
||||
|
||||
}
|
||||
|
||||
|
||||
//case:超音数的访问次数->按部门的呢->p2的呢
|
||||
@Test
|
||||
public void queryTest2() {
|
||||
QueryContextReq queryContextReq = DataUtils.getQueryContextReq(2,"超音数的访问次数");
|
||||
QueryResultResp queryResultResp = new QueryResultResp();
|
||||
try {
|
||||
queryResultResp = queryService.executeQuery(queryContextReq);
|
||||
} catch (Exception e) {
|
||||
|
||||
}
|
||||
LOGGER.info("QueryResultResp queryResultResp:{}", JsonUtil.toString(queryResultResp));
|
||||
//assert queryState
|
||||
Assert.assertEquals(queryResultResp.getQueryState(), 0);
|
||||
//assert queryMode
|
||||
Assert.assertEquals(queryResultResp.getQueryMode(), MetricDomain.QUERY_MODE);
|
||||
//assert aggType
|
||||
Assert.assertEquals(queryResultResp.getChatContext().getAggType(), null);
|
||||
//assert 主题域Id
|
||||
assertThat(queryResultResp.getChatContext().getDomainId()).isEqualTo(1L);
|
||||
|
||||
//assert 指标
|
||||
Set<SchemaItem> metrics = queryResultResp.getChatContext().getMetrics();
|
||||
SchemaItem schemaItemMetric = DataUtils.getSchemaItem(2L, "访问次数", "pv");
|
||||
Boolean metricExist = DataUtils.compareSchemaItem(metrics, schemaItemMetric);
|
||||
assertThat(metricExist).isEqualTo(true);
|
||||
|
||||
//assert 维度
|
||||
Set<SchemaItem> dimensions = queryResultResp.getChatContext().getDimensions();
|
||||
Boolean dimensionExist = DataUtils.compareDateDimension(dimensions);
|
||||
assertThat(dimensionExist).isEqualTo(true);
|
||||
|
||||
|
||||
//assert 时间filter
|
||||
DateConf dateInfo = DataUtils.getDateConf(7, DateConf.DateMode.RECENT_UNITS, "DAY");
|
||||
Boolean timeFilterExist = DataUtils.compareDate(queryResultResp.getChatContext().getDateInfo(), dateInfo);
|
||||
assertThat(timeFilterExist).isEqualTo(true);
|
||||
|
||||
//assert nativeQuery
|
||||
assertThat(queryResultResp.getChatContext().getNativeQuery()).isEqualTo(false);
|
||||
|
||||
|
||||
queryContextReq = DataUtils.getQueryContextReq(2,"按部门的呢");
|
||||
try {
|
||||
queryResultResp = queryService.executeQuery(queryContextReq);
|
||||
} catch (Exception e) {
|
||||
|
||||
}
|
||||
LOGGER.info("QueryResultResp queryResultResp:{}", JsonUtil.toString(queryResultResp));
|
||||
//assert queryState
|
||||
Assert.assertEquals(queryResultResp.getQueryState(), 0);
|
||||
//assert queryMode
|
||||
Assert.assertEquals(queryResultResp.getQueryMode(), MetricGroupBy.QUERY_MODE);
|
||||
//assert aggType
|
||||
Assert.assertEquals(queryResultResp.getChatContext().getAggType(), null);
|
||||
//assert 主题域Id
|
||||
assertThat(queryResultResp.getChatContext().getDomainId()).isEqualTo(1L);
|
||||
|
||||
//assert 指标
|
||||
Set<SchemaItem> metrics1 = queryResultResp.getChatContext().getMetrics();
|
||||
SchemaItem schemaItemMetric1 = DataUtils.getSchemaItem(2L, "访问次数", "pv");
|
||||
Boolean metricExist1 = DataUtils.compareSchemaItem(metrics1, schemaItemMetric1);
|
||||
assertThat(metricExist1).isEqualTo(true);
|
||||
|
||||
//assert 维度
|
||||
Set<SchemaItem> dimensions1 = queryResultResp.getChatContext().getDimensions();
|
||||
Boolean dimensionExist1 = DataUtils.compareDateDimension(dimensions1);
|
||||
assertThat(dimensionExist1).isEqualTo(true);
|
||||
|
||||
SchemaItem schemaItemDimension2 = DataUtils.getSchemaItem(1L, "部门", "department");
|
||||
Boolean dimensionExist2 = DataUtils.compareSchemaItem(dimensions1, schemaItemDimension2);
|
||||
assertThat(dimensionExist2).isEqualTo(true);
|
||||
|
||||
|
||||
//assert 时间filter
|
||||
DateConf dateInfo1 = DataUtils.getDateConf(7, DateConf.DateMode.RECENT_UNITS, "DAY");
|
||||
Boolean timeFilterExist1 = DataUtils.compareDate(queryResultResp.getChatContext().getDateInfo(), dateInfo1);
|
||||
assertThat(timeFilterExist1).isEqualTo(true);
|
||||
|
||||
//assert nativeQuery
|
||||
assertThat(queryResultResp.getChatContext().getNativeQuery()).isEqualTo(false);
|
||||
|
||||
|
||||
queryContextReq = DataUtils.getQueryContextReq(2,"p2的呢");
|
||||
try {
|
||||
queryResultResp = queryService.executeQuery(queryContextReq);
|
||||
} catch (Exception e) {
|
||||
|
||||
}
|
||||
LOGGER.info("QueryResultResp queryResultResp:{}", JsonUtil.toString(queryResultResp));
|
||||
//assert queryState
|
||||
Assert.assertEquals(queryResultResp.getQueryState(), 0);
|
||||
//assert queryMode
|
||||
Assert.assertEquals(queryResultResp.getQueryMode(), MetricFilter.QUERY_MODE);
|
||||
//assert aggType
|
||||
Assert.assertEquals(queryResultResp.getChatContext().getAggType(), null);
|
||||
//assert 主题域Id
|
||||
assertThat(queryResultResp.getChatContext().getDomainId()).isEqualTo(1L);
|
||||
|
||||
//assert 指标
|
||||
Set<SchemaItem> metrics2 = queryResultResp.getChatContext().getMetrics();
|
||||
SchemaItem schemaItemMetric2 = DataUtils.getSchemaItem(2L, "访问次数", "pv");
|
||||
Boolean metricExist2 = DataUtils.compareSchemaItem(metrics2, schemaItemMetric2);
|
||||
assertThat(metricExist2).isEqualTo(true);
|
||||
|
||||
//assert 维度
|
||||
Set<SchemaItem> dimensions2 = queryResultResp.getChatContext().getDimensions();
|
||||
Boolean dimensionExist3 = DataUtils.compareDateDimension(dimensions2);
|
||||
assertThat(dimensionExist3).isEqualTo(true);
|
||||
|
||||
//assert 维度filter
|
||||
Set<Filter> dimensionFilters2 = queryResultResp.getChatContext().getDimensionFilters();
|
||||
Filter dimensionFilter2 = DataUtils.getFilter("page", FilterOperatorEnum.EQUALS, "p2", "页面", 3L);
|
||||
Boolean dimensionFilterExist2 = DataUtils.compareDimensionFilter(dimensionFilters2, dimensionFilter2);
|
||||
assertThat(dimensionFilterExist2).isEqualTo(true);
|
||||
|
||||
|
||||
//assert 时间filter
|
||||
DateConf dateInfo2 = DataUtils.getDateConf(7, DateConf.DateMode.RECENT_UNITS, "DAY");
|
||||
Boolean timeFilterExist2 = DataUtils.compareDate(queryResultResp.getChatContext().getDateInfo(), dateInfo2);
|
||||
assertThat(timeFilterExist2).isEqualTo(true);
|
||||
|
||||
//assert nativeQuery
|
||||
assertThat(queryResultResp.getChatContext().getNativeQuery()).isEqualTo(false);
|
||||
|
||||
}
|
||||
|
||||
//alice的访问次数->对比alice和lucy呢->他是哪个部门的呢
|
||||
@Test
|
||||
public void queryTest3() {
|
||||
QueryContextReq queryContextReq = DataUtils.getQueryContextReq(1,"alice的访问次数");
|
||||
QueryResultResp queryResultResp = new QueryResultResp();
|
||||
try {
|
||||
queryResultResp = queryService.executeQuery(queryContextReq);
|
||||
} catch (Exception e) {
|
||||
|
||||
}
|
||||
LOGGER.info("QueryResultResp queryResultResp:{}", JsonUtil.toString(queryResultResp));
|
||||
//assert queryState
|
||||
Assert.assertEquals(queryResultResp.getQueryState(), 0);
|
||||
//assert queryMode
|
||||
Assert.assertEquals(queryResultResp.getQueryMode(), MetricFilter.QUERY_MODE);
|
||||
//assert aggType
|
||||
Assert.assertEquals(queryResultResp.getChatContext().getAggType(), null);
|
||||
//assert 主题域Id
|
||||
assertThat(queryResultResp.getChatContext().getDomainId()).isEqualTo(1L);
|
||||
|
||||
//assert 指标
|
||||
Set<SchemaItem> metrics = queryResultResp.getChatContext().getMetrics();
|
||||
SchemaItem schemaItemMetric = DataUtils.getSchemaItem(2L, "访问次数", "pv");
|
||||
Boolean metricExist = DataUtils.compareSchemaItem(metrics, schemaItemMetric);
|
||||
assertThat(metricExist).isEqualTo(true);
|
||||
|
||||
//assert 维度
|
||||
Set<SchemaItem> dimensions = queryResultResp.getChatContext().getDimensions();
|
||||
Boolean dimensionExist = DataUtils.compareDateDimension(dimensions);
|
||||
assertThat(dimensionExist).isEqualTo(true);
|
||||
|
||||
//assert 维度filter
|
||||
Set<Filter> dimensionFilters = queryResultResp.getChatContext().getDimensionFilters();
|
||||
Filter dimensionFilter = DataUtils.getFilter("user_name", FilterOperatorEnum.EQUALS, "alice", "用户名", 2L);
|
||||
Boolean dimensionFilterExist = DataUtils.compareDimensionFilter(dimensionFilters, dimensionFilter);
|
||||
assertThat(dimensionFilterExist).isEqualTo(true);
|
||||
|
||||
//assert 时间filter
|
||||
DateConf dateInfo = DataUtils.getDateConf(7, DateConf.DateMode.RECENT_UNITS, "DAY");
|
||||
Boolean timeFilterExist = DataUtils.compareDate(queryResultResp.getChatContext().getDateInfo(), dateInfo);
|
||||
assertThat(timeFilterExist).isEqualTo(true);
|
||||
|
||||
//assert nativeQuery
|
||||
assertThat(queryResultResp.getChatContext().getNativeQuery()).isEqualTo(false);
|
||||
|
||||
|
||||
queryContextReq = DataUtils.getQueryContextReq(1,"对比alice和lucy呢");
|
||||
try {
|
||||
queryResultResp = queryService.executeQuery(queryContextReq);
|
||||
} catch (Exception e) {
|
||||
|
||||
}
|
||||
LOGGER.info("QueryResultResp queryResultResp:{}", JsonUtil.toString(queryResultResp));
|
||||
//assert queryState
|
||||
Assert.assertEquals(queryResultResp.getQueryState(), 0);
|
||||
//assert queryMode
|
||||
Assert.assertEquals(queryResultResp.getQueryMode(), MetricCompare.QUERY_MODE);
|
||||
//assert aggType
|
||||
Assert.assertEquals(queryResultResp.getChatContext().getAggType(), null);
|
||||
//assert 主题域Id
|
||||
assertThat(queryResultResp.getChatContext().getDomainId()).isEqualTo(1L);
|
||||
|
||||
//assert 指标
|
||||
Set<SchemaItem> metrics1 = queryResultResp.getChatContext().getMetrics();
|
||||
SchemaItem schemaItemMetric1 = DataUtils.getSchemaItem(2L, "访问次数", "pv");
|
||||
Boolean metricExist1 = DataUtils.compareSchemaItem(metrics1, schemaItemMetric1);
|
||||
assertThat(metricExist1).isEqualTo(true);
|
||||
|
||||
//assert 维度
|
||||
Set<SchemaItem> dimensions1 = queryResultResp.getChatContext().getDimensions();
|
||||
Boolean dimensionExist1 = DataUtils.compareDateDimension(dimensions1);
|
||||
assertThat(dimensionExist1).isEqualTo(true);
|
||||
|
||||
//assert 维度filter
|
||||
Set<Filter> dimensionFilters1 = queryResultResp.getChatContext().getDimensionFilters();
|
||||
List<String> list = new ArrayList<>();
|
||||
list.add("alice");
|
||||
list.add("lucy");
|
||||
Filter dimensionFilter1 = DataUtils.getFilter("user_name", FilterOperatorEnum.IN, list, "用户名", 2L);
|
||||
Boolean dimensionFilterExist1 = DataUtils.compareDimensionFilter(dimensionFilters1, dimensionFilter1);
|
||||
assertThat(dimensionFilterExist1).isEqualTo(true);
|
||||
|
||||
//assert 时间filter
|
||||
DateConf dateInfo1 = DataUtils.getDateConf(7, DateConf.DateMode.RECENT_UNITS, "DAY");
|
||||
Boolean timeFilterExist1 = DataUtils.compareDate(queryResultResp.getChatContext().getDateInfo(), dateInfo1);
|
||||
assertThat(timeFilterExist1).isEqualTo(true);
|
||||
|
||||
//assert nativeQuery
|
||||
assertThat(queryResultResp.getChatContext().getNativeQuery()).isEqualTo(false);
|
||||
|
||||
|
||||
queryContextReq = DataUtils.getQueryContextReq(1,"他是哪个部门的呢");
|
||||
try {
|
||||
queryResultResp = queryService.executeQuery(queryContextReq);
|
||||
} catch (Exception e) {
|
||||
|
||||
}
|
||||
LOGGER.info("QueryResultResp queryResultResp:{}", JsonUtil.toString(queryResultResp));
|
||||
//assert queryState
|
||||
Assert.assertEquals(queryResultResp.getQueryState(), 0);
|
||||
//assert queryMode
|
||||
Assert.assertEquals(queryResultResp.getQueryMode(), MetricFilter.QUERY_MODE);
|
||||
//assert aggType
|
||||
Assert.assertEquals(queryResultResp.getChatContext().getAggType(), null);
|
||||
//assert 主题域Id
|
||||
assertThat(queryResultResp.getChatContext().getDomainId()).isEqualTo(1L);
|
||||
|
||||
//assert 指标
|
||||
Set<SchemaItem> metrics2 = queryResultResp.getChatContext().getMetrics();
|
||||
SchemaItem schemaItemMetric2 = DataUtils.getSchemaItem(2L, "访问次数", "pv");
|
||||
Boolean metricExist2 = DataUtils.compareSchemaItem(metrics2, schemaItemMetric2);
|
||||
assertThat(metricExist2).isEqualTo(true);
|
||||
|
||||
//assert 维度
|
||||
Set<SchemaItem> dimensions2 = queryResultResp.getChatContext().getDimensions();
|
||||
Boolean dimensionExist2 = DataUtils.compareDateDimension(dimensions2);
|
||||
assertThat(dimensionExist2).isEqualTo(true);
|
||||
|
||||
//assert 维度filter
|
||||
Set<Filter> dimensionFilters2 = queryResultResp.getChatContext().getDimensionFilters();
|
||||
List<String> list1 = new ArrayList<>();
|
||||
list1.add("alice");
|
||||
list1.add("lucy");
|
||||
Filter dimensionFilter2 = DataUtils.getFilter("user_name", FilterOperatorEnum.IN, list1, "用户名", 2L);
|
||||
Boolean dimensionFilterExist2 = DataUtils.compareDimensionFilter(dimensionFilters2, dimensionFilter2);
|
||||
assertThat(dimensionFilterExist2).isEqualTo(true);
|
||||
|
||||
//assert 时间filter
|
||||
DateConf dateInfo2 = DataUtils.getDateConf(7, DateConf.DateMode.RECENT_UNITS, "DAY");
|
||||
Boolean timeFilterExist2 = DataUtils.compareDate(queryResultResp.getChatContext().getDateInfo(), dateInfo2);
|
||||
assertThat(timeFilterExist2).isEqualTo(true);
|
||||
|
||||
//assert nativeQuery
|
||||
assertThat(queryResultResp.getChatContext().getNativeQuery()).isEqualTo(false);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,154 @@
|
||||
package com.tencent.supersonic.integration;
|
||||
|
||||
import com.tencent.supersonic.chat.api.pojo.SemanticParseInfo;
|
||||
import com.tencent.supersonic.chat.api.pojo.response.QueryResult;
|
||||
import com.tencent.supersonic.chat.query.rule.metric.MetricFilterQuery;
|
||||
import com.tencent.supersonic.chat.query.rule.metric.MetricGroupByQuery;
|
||||
import com.tencent.supersonic.common.pojo.DateConf;
|
||||
import com.tencent.supersonic.semantic.api.query.enums.FilterOperatorEnum;
|
||||
import com.tencent.supersonic.util.DataUtils;
|
||||
import org.junit.Test;
|
||||
import org.junit.jupiter.api.Order;
|
||||
|
||||
import java.text.DateFormat;
|
||||
import java.text.SimpleDateFormat;
|
||||
|
||||
import static com.tencent.supersonic.common.pojo.enums.AggregateTypeEnum.NONE;
|
||||
|
||||
public class MultiTurnsTest extends BaseQueryTest {
|
||||
|
||||
@Test
|
||||
@Order(1)
|
||||
public void queryTest_01() throws Exception {
|
||||
QueryResult actualResult = submitMultiTurnChat("alice的访问次数");
|
||||
|
||||
QueryResult expectedResult = new QueryResult();
|
||||
SemanticParseInfo expectedParseInfo = new SemanticParseInfo();
|
||||
expectedResult.setChatContext(expectedParseInfo);
|
||||
|
||||
expectedResult.setQueryMode(MetricFilterQuery.QUERY_MODE);
|
||||
expectedParseInfo.setAggType(NONE);
|
||||
|
||||
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("访问次数"));
|
||||
|
||||
expectedParseInfo.getDimensionFilters().add(DataUtils.getFilter("user_name",
|
||||
FilterOperatorEnum.EQUALS, "alice", "用户名", 2L));
|
||||
|
||||
expectedParseInfo.setDateInfo(DataUtils.getDateConf(DateConf.DateMode.BETWEEN_CONTINUOUS, startDay, endDay));
|
||||
expectedParseInfo.setNativeQuery(false);
|
||||
|
||||
assertQueryResult(expectedResult, actualResult);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(2)
|
||||
public void queryTest_02() throws Exception {
|
||||
QueryResult actualResult = submitMultiTurnChat("停留时长呢");
|
||||
|
||||
QueryResult expectedResult = new QueryResult();
|
||||
SemanticParseInfo expectedParseInfo = new SemanticParseInfo();
|
||||
expectedResult.setChatContext(expectedParseInfo);
|
||||
|
||||
expectedResult.setQueryMode(MetricFilterQuery.QUERY_MODE);
|
||||
expectedParseInfo.setAggType(NONE);
|
||||
|
||||
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("停留时长"));
|
||||
|
||||
expectedParseInfo.getDimensionFilters().add(DataUtils.getFilter("user_name",
|
||||
FilterOperatorEnum.EQUALS, "alice", "用户名", 2L));
|
||||
|
||||
expectedParseInfo.setDateInfo(DataUtils.getDateConf(DateConf.DateMode.BETWEEN_CONTINUOUS, startDay, endDay));
|
||||
expectedParseInfo.setNativeQuery(false);
|
||||
|
||||
assertQueryResult(expectedResult, actualResult);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(3)
|
||||
public void queryTest_03() throws Exception {
|
||||
QueryResult actualResult = submitMultiTurnChat("lucy的如何");
|
||||
|
||||
QueryResult expectedResult = new QueryResult();
|
||||
SemanticParseInfo expectedParseInfo = new SemanticParseInfo();
|
||||
expectedResult.setChatContext(expectedParseInfo);
|
||||
|
||||
expectedResult.setQueryMode(MetricFilterQuery.QUERY_MODE);
|
||||
expectedParseInfo.setAggType(NONE);
|
||||
|
||||
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("停留时长"));
|
||||
|
||||
expectedParseInfo.getDimensionFilters().add(DataUtils.getFilter("user_name",
|
||||
FilterOperatorEnum.EQUALS, "lucy", "用户名", 2L));
|
||||
|
||||
expectedParseInfo.setDateInfo(DataUtils.getDateConf(DateConf.DateMode.BETWEEN_CONTINUOUS, startDay, endDay));
|
||||
expectedParseInfo.setNativeQuery(false);
|
||||
|
||||
assertQueryResult(expectedResult, actualResult);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(4)
|
||||
public void queryTest_04() throws Exception {
|
||||
QueryResult actualResult = submitMultiTurnChat("按部门统计");
|
||||
|
||||
QueryResult expectedResult = new QueryResult();
|
||||
SemanticParseInfo expectedParseInfo = new SemanticParseInfo();
|
||||
expectedResult.setChatContext(expectedParseInfo);
|
||||
|
||||
expectedResult.setQueryMode(MetricGroupByQuery.QUERY_MODE);
|
||||
expectedParseInfo.setAggType(NONE);
|
||||
|
||||
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("停留时长"));
|
||||
expectedParseInfo.getDimensions().add(DataUtils.getSchemaElement("部门"));
|
||||
|
||||
expectedParseInfo.setDateInfo(DataUtils.getDateConf(DateConf.DateMode.BETWEEN_CONTINUOUS, startDay, endDay));
|
||||
expectedParseInfo.setNativeQuery(false);
|
||||
|
||||
assertQueryResult(expectedResult, actualResult);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(5)
|
||||
public void queryTest_05() throws Exception {
|
||||
DateFormat format = new SimpleDateFormat("yyyy-mm-dd");
|
||||
DateFormat textFormat = new SimpleDateFormat("yyyy年mm月dd日");
|
||||
QueryResult actualResult = submitMultiTurnChat(textFormat.format(format.parse(startDay)));
|
||||
|
||||
QueryResult expectedResult = new QueryResult();
|
||||
SemanticParseInfo expectedParseInfo = new SemanticParseInfo();
|
||||
expectedResult.setChatContext(expectedParseInfo);
|
||||
|
||||
expectedResult.setQueryMode(MetricGroupByQuery.QUERY_MODE);
|
||||
expectedParseInfo.setAggType(NONE);
|
||||
|
||||
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("停留时长"));
|
||||
expectedParseInfo.getDimensions().add(DataUtils.getSchemaElement("部门"));
|
||||
|
||||
expectedParseInfo.setDateInfo(DataUtils.getDateConf(DateConf.DateMode.BETWEEN_CONTINUOUS, startDay, startDay));
|
||||
expectedParseInfo.setNativeQuery(false);
|
||||
|
||||
assertQueryResult(expectedResult, actualResult);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(6)
|
||||
public void queryTest_06() throws Exception {
|
||||
QueryResult actualResult = submitMultiTurnChat("近30天");
|
||||
|
||||
QueryResult expectedResult = new QueryResult();
|
||||
SemanticParseInfo expectedParseInfo = new SemanticParseInfo();
|
||||
expectedResult.setChatContext(expectedParseInfo);
|
||||
|
||||
expectedResult.setQueryMode(MetricGroupByQuery.QUERY_MODE);
|
||||
expectedParseInfo.setAggType(NONE);
|
||||
|
||||
expectedParseInfo.getMetrics().add(DataUtils.getSchemaElement("停留时长"));
|
||||
expectedParseInfo.getDimensions().add(DataUtils.getSchemaElement("部门"));
|
||||
|
||||
expectedParseInfo.setDateInfo(DataUtils.getDateConf(30, DateConf.DateMode.RECENT_UNITS, "DAY"));
|
||||
expectedParseInfo.setNativeQuery(false);
|
||||
|
||||
assertQueryResult(expectedResult, actualResult);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,567 +0,0 @@
|
||||
package com.tencent.supersonic.integration;
|
||||
|
||||
import com.tencent.supersonic.StandaloneLauncher;
|
||||
import com.tencent.supersonic.chat.api.pojo.Filter;
|
||||
import com.tencent.supersonic.chat.api.request.QueryContextReq;
|
||||
import com.tencent.supersonic.chat.api.response.QueryResultResp;
|
||||
import com.tencent.supersonic.chat.application.query.*;
|
||||
import com.tencent.supersonic.common.enums.AggregateTypeEnum;
|
||||
import com.tencent.supersonic.common.pojo.DateConf;
|
||||
import com.tencent.supersonic.common.pojo.SchemaItem;
|
||||
import com.tencent.supersonic.common.util.json.JsonUtil;
|
||||
import com.tencent.supersonic.semantic.api.query.enums.FilterOperatorEnum;
|
||||
import com.tencent.supersonic.util.DataUtils;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.test.context.ActiveProfiles;
|
||||
import org.springframework.test.context.junit4.SpringRunner;
|
||||
import com.tencent.supersonic.chat.domain.service.QueryService;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest(classes = StandaloneLauncher.class)
|
||||
@ActiveProfiles("local")
|
||||
public class QueryTest {
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(QueryTest.class);
|
||||
|
||||
@Autowired
|
||||
@Qualifier("chatQueryService")
|
||||
private QueryService queryService;
|
||||
|
||||
//case:alice的访问次数,queryMode:METRIC_FILTER,
|
||||
@Test
|
||||
public void queryTest_01() {
|
||||
QueryContextReq queryContextReq = DataUtils.getQueryContextReq(1, "alice的访问次数");
|
||||
QueryResultResp queryResultResp = new QueryResultResp();
|
||||
try {
|
||||
queryResultResp = queryService.executeQuery(queryContextReq);
|
||||
} catch (Exception e) {
|
||||
|
||||
}
|
||||
LOGGER.info("QueryResultResp queryResultResp:{}", JsonUtil.toString(queryResultResp));
|
||||
//assert queryState
|
||||
Assert.assertEquals(queryResultResp.getQueryState(), 0);
|
||||
//assert queryMode
|
||||
Assert.assertEquals(queryResultResp.getQueryMode(), MetricFilter.QUERY_MODE);
|
||||
//assert aggType
|
||||
Assert.assertEquals(queryResultResp.getChatContext().getAggType(), null);
|
||||
//assert 主题域Id
|
||||
assertThat(queryResultResp.getChatContext().getDomainId()).isEqualTo(1L);
|
||||
|
||||
//assert 指标
|
||||
Set<SchemaItem> metrics = queryResultResp.getChatContext().getMetrics();
|
||||
SchemaItem schemaItemMetric = DataUtils.getSchemaItem(2L, "访问次数", "pv");
|
||||
Boolean metricExist = DataUtils.compareSchemaItem(metrics, schemaItemMetric);
|
||||
assertThat(metricExist).isEqualTo(true);
|
||||
|
||||
//assert 维度
|
||||
Set<SchemaItem> dimensions = queryResultResp.getChatContext().getDimensions();
|
||||
Boolean dimensionExist = DataUtils.compareDateDimension(dimensions);
|
||||
assertThat(dimensionExist).isEqualTo(true);
|
||||
|
||||
//assert 维度filter
|
||||
Set<Filter> dimensionFilters = queryResultResp.getChatContext().getDimensionFilters();
|
||||
Filter dimensionFilter = DataUtils.getFilter("user_name", FilterOperatorEnum.EQUALS, "alice", "用户名", 2L);
|
||||
Boolean dimensionFilterExist = DataUtils.compareDimensionFilter(dimensionFilters, dimensionFilter);
|
||||
assertThat(dimensionFilterExist).isEqualTo(true);
|
||||
|
||||
//assert 时间filter
|
||||
DateConf dateInfo = DataUtils.getDateConf(7, DateConf.DateMode.RECENT_UNITS, "DAY");
|
||||
Boolean timeFilterExist = DataUtils.compareDate(queryResultResp.getChatContext().getDateInfo(), dateInfo);
|
||||
assertThat(timeFilterExist).isEqualTo(true);
|
||||
|
||||
//assert nativeQuery
|
||||
assertThat(queryResultResp.getChatContext().getNativeQuery()).isEqualTo(false);
|
||||
|
||||
}
|
||||
|
||||
//case:超音数的访问次数,queryMode:METRIC_DOMAIN
|
||||
@Test
|
||||
public void queryTest_02() {
|
||||
QueryContextReq queryContextReq = DataUtils.getQueryContextReq(2, "超音数的访问次数");
|
||||
QueryResultResp queryResultResp = new QueryResultResp();
|
||||
try {
|
||||
queryResultResp = queryService.executeQuery(queryContextReq);
|
||||
} catch (Exception e) {
|
||||
|
||||
}
|
||||
LOGGER.info("QueryResultResp queryResultResp:{}", JsonUtil.toString(queryResultResp));
|
||||
//assert queryState
|
||||
Assert.assertEquals(queryResultResp.getQueryState(), 0);
|
||||
//assert queryMode
|
||||
Assert.assertEquals(queryResultResp.getQueryMode(), MetricDomain.QUERY_MODE);
|
||||
//assert aggType
|
||||
Assert.assertEquals(queryResultResp.getChatContext().getAggType(), null);
|
||||
//assert 主题域Id
|
||||
assertThat(queryResultResp.getChatContext().getDomainId()).isEqualTo(1L);
|
||||
|
||||
//assert 指标
|
||||
Set<SchemaItem> metrics = queryResultResp.getChatContext().getMetrics();
|
||||
SchemaItem schemaItemMetric = DataUtils.getSchemaItem(2L, "访问次数", "pv");
|
||||
Boolean metricExist = DataUtils.compareSchemaItem(metrics, schemaItemMetric);
|
||||
assertThat(metricExist).isEqualTo(true);
|
||||
|
||||
//assert 维度
|
||||
Set<SchemaItem> dimensions = queryResultResp.getChatContext().getDimensions();
|
||||
Boolean dimensionExist = DataUtils.compareDateDimension(dimensions);
|
||||
assertThat(dimensionExist).isEqualTo(true);
|
||||
|
||||
|
||||
//assert 时间filter
|
||||
DateConf dateInfo = DataUtils.getDateConf(7, DateConf.DateMode.RECENT_UNITS, "DAY");
|
||||
Boolean timeFilterExist = DataUtils.compareDate(queryResultResp.getChatContext().getDateInfo(), dateInfo);
|
||||
assertThat(timeFilterExist).isEqualTo(true);
|
||||
|
||||
//assert nativeQuery
|
||||
assertThat(queryResultResp.getChatContext().getNativeQuery()).isEqualTo(false);
|
||||
|
||||
}
|
||||
|
||||
|
||||
//case:超音数各部门的访问次数,queryMode:METRIC_GROUPBY
|
||||
@Test
|
||||
public void queryTest_03() {
|
||||
QueryContextReq queryContextReq = DataUtils.getQueryContextReq(1, "超音数各部门的访问次数");
|
||||
QueryResultResp queryResultResp = new QueryResultResp();
|
||||
try {
|
||||
queryResultResp = queryService.executeQuery(queryContextReq);
|
||||
} catch (Exception e) {
|
||||
|
||||
}
|
||||
LOGGER.info("QueryResultResp queryResultResp:{}", JsonUtil.toString(queryResultResp));
|
||||
//assert queryState
|
||||
Assert.assertEquals(queryResultResp.getQueryState(), 0);
|
||||
//assert queryMode
|
||||
Assert.assertEquals(queryResultResp.getQueryMode(), MetricGroupBy.QUERY_MODE);
|
||||
//assert aggType
|
||||
Assert.assertEquals(queryResultResp.getChatContext().getAggType(), null);
|
||||
//assert 主题域Id
|
||||
assertThat(queryResultResp.getChatContext().getDomainId()).isEqualTo(1L);
|
||||
|
||||
//assert 指标
|
||||
Set<SchemaItem> metrics = queryResultResp.getChatContext().getMetrics();
|
||||
SchemaItem schemaItemMetric = DataUtils.getSchemaItem(2L, "访问次数", "pv");
|
||||
Boolean metricExist = DataUtils.compareSchemaItem(metrics, schemaItemMetric);
|
||||
assertThat(metricExist).isEqualTo(true);
|
||||
|
||||
//assert 维度
|
||||
Set<SchemaItem> dimensions = queryResultResp.getChatContext().getDimensions();
|
||||
Boolean dimensionExist = DataUtils.compareDateDimension(dimensions);
|
||||
assertThat(dimensionExist).isEqualTo(true);
|
||||
|
||||
SchemaItem schemaItemDimension1 = DataUtils.getSchemaItem(1L, "部门", "department");
|
||||
Boolean dimensionExist1 = DataUtils.compareSchemaItem(dimensions, schemaItemDimension1);
|
||||
assertThat(dimensionExist1).isEqualTo(true);
|
||||
|
||||
|
||||
//assert 时间filter
|
||||
DateConf dateInfo = DataUtils.getDateConf(7, DateConf.DateMode.RECENT_UNITS, "DAY");
|
||||
Boolean timeFilterExist = DataUtils.compareDate(queryResultResp.getChatContext().getDateInfo(), dateInfo);
|
||||
assertThat(timeFilterExist).isEqualTo(true);
|
||||
|
||||
//assert nativeQuery
|
||||
assertThat(queryResultResp.getChatContext().getNativeQuery()).isEqualTo(false);
|
||||
|
||||
}
|
||||
|
||||
|
||||
//case:对比alice和lucy的访问次数,queryMode:METRIC_COMPARE
|
||||
@Test
|
||||
public void queryTest_04() {
|
||||
QueryContextReq queryContextReq = DataUtils.getQueryContextReq(1, "对比alice和lucy的访问次数");
|
||||
QueryResultResp queryResultResp = new QueryResultResp();
|
||||
try {
|
||||
queryResultResp = queryService.executeQuery(queryContextReq);
|
||||
} catch (Exception e) {
|
||||
|
||||
}
|
||||
LOGGER.info("QueryResultResp queryResultResp:{}", JsonUtil.toString(queryResultResp));
|
||||
//assert queryState
|
||||
Assert.assertEquals(queryResultResp.getQueryState(), 0);
|
||||
//assert queryMode
|
||||
Assert.assertEquals(queryResultResp.getQueryMode(), MetricCompare.QUERY_MODE);
|
||||
//assert aggType
|
||||
Assert.assertEquals(queryResultResp.getChatContext().getAggType(), null);
|
||||
//assert 主题域Id
|
||||
assertThat(queryResultResp.getChatContext().getDomainId()).isEqualTo(1L);
|
||||
|
||||
//assert 指标
|
||||
Set<SchemaItem> metrics = queryResultResp.getChatContext().getMetrics();
|
||||
SchemaItem schemaItemMetric = DataUtils.getSchemaItem(2L, "访问次数", "pv");
|
||||
Boolean metricExist = DataUtils.compareSchemaItem(metrics, schemaItemMetric);
|
||||
assertThat(metricExist).isEqualTo(true);
|
||||
|
||||
//assert 维度
|
||||
Set<SchemaItem> dimensions = queryResultResp.getChatContext().getDimensions();
|
||||
Boolean dimensionExist = DataUtils.compareDateDimension(dimensions);
|
||||
assertThat(dimensionExist).isEqualTo(true);
|
||||
|
||||
//assert 维度filter
|
||||
Set<Filter> dimensionFilters = queryResultResp.getChatContext().getDimensionFilters();
|
||||
List<String> list = new ArrayList<>();
|
||||
list.add("alice");
|
||||
list.add("lucy");
|
||||
Filter dimensionFilter = DataUtils.getFilter("user_name", FilterOperatorEnum.IN, list, "用户名", 2L);
|
||||
Boolean dimensionFilterExist = DataUtils.compareDimensionFilter(dimensionFilters, dimensionFilter);
|
||||
assertThat(dimensionFilterExist).isEqualTo(true);
|
||||
|
||||
//assert 时间filter
|
||||
DateConf dateInfo = DataUtils.getDateConf(7, DateConf.DateMode.RECENT_UNITS, "DAY");
|
||||
Boolean timeFilterExist = DataUtils.compareDate(queryResultResp.getChatContext().getDateInfo(), dateInfo);
|
||||
assertThat(timeFilterExist).isEqualTo(true);
|
||||
|
||||
//assert nativeQuery
|
||||
assertThat(queryResultResp.getChatContext().getNativeQuery()).isEqualTo(false);
|
||||
|
||||
}
|
||||
|
||||
//case:近3天访问次数最多的用户,queryMode:ENTITY_detail
|
||||
@Test
|
||||
public void queryTest_05() {
|
||||
QueryContextReq queryContextReq = DataUtils.getQueryContextReq(2, "艺人周杰伦的代表作");
|
||||
QueryResultResp queryResultResp = new QueryResultResp();
|
||||
try {
|
||||
queryResultResp = queryService.executeQuery(queryContextReq);
|
||||
} catch (Exception e) {
|
||||
|
||||
}
|
||||
LOGGER.info("QueryResultResp queryResultResp:{}", queryResultResp);
|
||||
//assert queryState
|
||||
Assert.assertEquals(queryResultResp.getQueryState(), 0);
|
||||
//assert queryMode
|
||||
Assert.assertEquals(queryResultResp.getQueryMode(), EntityDetail.QUERY_MODE);
|
||||
//assert aggType
|
||||
Assert.assertEquals(queryResultResp.getChatContext().getAggType(), null);
|
||||
//assert 主题域Id
|
||||
assertThat(queryResultResp.getChatContext().getDomainId()).isEqualTo(2L);
|
||||
|
||||
|
||||
//assert 维度
|
||||
Set<SchemaItem> dimensions = queryResultResp.getChatContext().getDimensions();
|
||||
SchemaItem schemaItemDimension = DataUtils.getSchemaItem(5L, "代表作", "song_name");
|
||||
Boolean dimensionExist = DataUtils.compareSchemaItem(dimensions, schemaItemDimension);
|
||||
assertThat(dimensionExist).isEqualTo(true);
|
||||
|
||||
//assert 维度filter
|
||||
Set<Filter> dimensionFilters = queryResultResp.getChatContext().getDimensionFilters();
|
||||
Filter dimensionFilter = DataUtils.getFilter("singer_name", FilterOperatorEnum.EQUALS, "周杰伦", "歌手名", 7L);
|
||||
Boolean dimensionFilterExist = DataUtils.compareDimensionFilter(dimensionFilters, dimensionFilter);
|
||||
assertThat(dimensionFilterExist).isEqualTo(true);
|
||||
|
||||
//assert 时间filter
|
||||
DateConf dateInfo = DataUtils.getDateConf(1, DateConf.DateMode.RECENT_UNITS, "DAY");
|
||||
Boolean timeFilterExist = DataUtils.compareDate(queryResultResp.getChatContext().getDateInfo(), dateInfo);
|
||||
assertThat(timeFilterExist).isEqualTo(true);
|
||||
|
||||
//assert nativeQuery
|
||||
assertThat(queryResultResp.getChatContext().getNativeQuery()).isEqualTo(true);
|
||||
|
||||
}
|
||||
|
||||
//case:近3天访问次数最多的用户名,queryMode:METRIC_ORDERBY
|
||||
@Test
|
||||
public void queryTest_06() {
|
||||
QueryContextReq queryContextReq = DataUtils.getQueryContextReq(2, "近3天访问次数最多的用户名");
|
||||
QueryResultResp queryResultResp = new QueryResultResp();
|
||||
try {
|
||||
queryResultResp = queryService.executeQuery(queryContextReq);
|
||||
} catch (Exception e) {
|
||||
|
||||
}
|
||||
LOGGER.info("QueryResultResp queryResultResp:{}", JsonUtil.toString(queryResultResp));
|
||||
//assert queryState
|
||||
Assert.assertEquals(queryResultResp.getQueryState(), 0);
|
||||
//assert queryMode
|
||||
Assert.assertEquals(queryResultResp.getQueryMode(), MetricOrderBy.QUERY_MODE);
|
||||
//assert aggType
|
||||
Assert.assertEquals(queryResultResp.getChatContext().getAggType(), AggregateTypeEnum.MAX);
|
||||
//assert 主题域Id
|
||||
assertThat(queryResultResp.getChatContext().getDomainId()).isEqualTo(1L);
|
||||
|
||||
//assert 指标
|
||||
Set<SchemaItem> metrics = queryResultResp.getChatContext().getMetrics();
|
||||
SchemaItem schemaItemMetric = DataUtils.getSchemaItem(2L, "访问次数", "pv");
|
||||
Boolean metricExist = DataUtils.compareSchemaItem(metrics, schemaItemMetric);
|
||||
assertThat(metricExist).isEqualTo(true);
|
||||
|
||||
//assert 维度
|
||||
Set<SchemaItem> dimensions = queryResultResp.getChatContext().getDimensions();
|
||||
SchemaItem schemaItemDimension = DataUtils.getSchemaItem(2L, "用户名", "user_name");
|
||||
Boolean dimensionExist = DataUtils.compareSchemaItem(dimensions, schemaItemDimension);
|
||||
assertThat(dimensionExist).isEqualTo(true);
|
||||
|
||||
//assert 时间filter
|
||||
DateConf dateInfo = DataUtils.getDateConf(3, DateConf.DateMode.RECENT_UNITS, "DAY");
|
||||
Boolean timeFilterExist = DataUtils.compareDate(queryResultResp.getChatContext().getDateInfo(), dateInfo);
|
||||
assertThat(timeFilterExist).isEqualTo(true);
|
||||
|
||||
//assert nativeQuery
|
||||
assertThat(queryResultResp.getChatContext().getNativeQuery()).isEqualTo(false);
|
||||
|
||||
}
|
||||
|
||||
|
||||
//case:播放量最多的艺人,queryMode:ENTITY_LIST_TOPN
|
||||
@Test
|
||||
public void queryTest_07() {
|
||||
QueryContextReq queryContextReq = DataUtils.getQueryContextReq(2, "播放量最多的艺人");
|
||||
QueryResultResp queryResultResp = new QueryResultResp();
|
||||
try {
|
||||
queryResultResp = queryService.executeQuery(queryContextReq);
|
||||
} catch (Exception e) {
|
||||
|
||||
}
|
||||
LOGGER.info("QueryResultResp queryResultResp:{}", queryResultResp);
|
||||
//assert queryState
|
||||
Assert.assertEquals(queryResultResp.getQueryState(), 0);
|
||||
//assert queryMode
|
||||
Assert.assertEquals(queryResultResp.getQueryMode(), EntityListTopN.QUERY_MODE);
|
||||
//assert aggType
|
||||
Assert.assertEquals(queryResultResp.getChatContext().getAggType(), AggregateTypeEnum.MAX);
|
||||
//assert 主题域Id
|
||||
assertThat(queryResultResp.getChatContext().getDomainId()).isEqualTo(2L);
|
||||
|
||||
//assert 维度
|
||||
Set<SchemaItem> dimensions = queryResultResp.getChatContext().getDimensions();
|
||||
SchemaItem schemaItemDimension = DataUtils.getSchemaItem(7L, "歌手名", "singer_name");
|
||||
Boolean dimensionExist = DataUtils.compareSchemaItem(dimensions, schemaItemDimension);
|
||||
assertThat(dimensionExist).isEqualTo(true);
|
||||
|
||||
//assert 指标
|
||||
Set<SchemaItem> metrics = queryResultResp.getChatContext().getMetrics();
|
||||
SchemaItem schemaItemMetric = DataUtils.getSchemaItem(4L, "播放量", "js_play_cnt");
|
||||
Boolean metricExist = DataUtils.compareSchemaItem(metrics, schemaItemMetric);
|
||||
assertThat(metricExist).isEqualTo(true);
|
||||
|
||||
//assert 时间filter
|
||||
DateConf dateInfo = DataUtils.getDateConf(1, DateConf.DateMode.RECENT_UNITS, "DAY");
|
||||
Boolean timeFilterExist = DataUtils.compareDate(queryResultResp.getChatContext().getDateInfo(), dateInfo);
|
||||
assertThat(timeFilterExist).isEqualTo(true);
|
||||
|
||||
//assert nativeQuery
|
||||
assertThat(queryResultResp.getChatContext().getNativeQuery()).isEqualTo(true);
|
||||
|
||||
}
|
||||
|
||||
//case:超音数各部门的访问次数总和,queryMode:METRIC_GROUPBY,aggType:sum
|
||||
@Test
|
||||
public void queryTest_09() {
|
||||
QueryContextReq queryContextReq = DataUtils.getQueryContextReq(1, "超音数各部门的访问次数总和");
|
||||
QueryResultResp queryResultResp = new QueryResultResp();
|
||||
try {
|
||||
queryResultResp = queryService.executeQuery(queryContextReq);
|
||||
} catch (Exception e) {
|
||||
|
||||
}
|
||||
LOGGER.info("QueryResultResp queryResultResp:{}", JsonUtil.toString(queryResultResp));
|
||||
//assert queryState
|
||||
Assert.assertEquals(queryResultResp.getQueryState(), 0);
|
||||
//assert queryMode
|
||||
Assert.assertEquals(queryResultResp.getQueryMode(), MetricGroupBy.QUERY_MODE);
|
||||
//assert aggType
|
||||
Assert.assertEquals(queryResultResp.getChatContext().getAggType(), AggregateTypeEnum.SUM);
|
||||
//assert 主题域Id
|
||||
assertThat(queryResultResp.getChatContext().getDomainId()).isEqualTo(1L);
|
||||
|
||||
//assert 指标
|
||||
Set<SchemaItem> metrics = queryResultResp.getChatContext().getMetrics();
|
||||
SchemaItem schemaItemMetric = DataUtils.getSchemaItem(2L, "访问次数", "pv");
|
||||
Boolean metricExist = DataUtils.compareSchemaItem(metrics, schemaItemMetric);
|
||||
assertThat(metricExist).isEqualTo(true);
|
||||
|
||||
//assert 维度
|
||||
Set<SchemaItem> dimensions = queryResultResp.getChatContext().getDimensions();
|
||||
Boolean dimensionExist = DataUtils.compareDateDimension(dimensions);
|
||||
assertThat(dimensionExist).isEqualTo(true);
|
||||
|
||||
SchemaItem schemaItemDimension1 = DataUtils.getSchemaItem(1L, "部门", "department");
|
||||
Boolean dimensionExist1 = DataUtils.compareSchemaItem(dimensions, schemaItemDimension1);
|
||||
assertThat(dimensionExist1).isEqualTo(true);
|
||||
|
||||
//assert 时间filter
|
||||
DateConf dateInfo = DataUtils.getDateConf(7, DateConf.DateMode.RECENT_UNITS, "DAY");
|
||||
Boolean timeFilterExist = DataUtils.compareDate(queryResultResp.getChatContext().getDateInfo(), dateInfo);
|
||||
;
|
||||
assertThat(timeFilterExist).isEqualTo(true);
|
||||
|
||||
//assert nativeQuery
|
||||
assertThat(queryResultResp.getChatContext().getNativeQuery()).isEqualTo(false);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void queryTest_10() {
|
||||
QueryContextReq queryContextReq = DataUtils.getQueryContextReq(2, "爱情、流行类型的艺人");
|
||||
QueryResultResp queryResultResp = new QueryResultResp();
|
||||
try {
|
||||
queryResultResp = queryService.executeQuery(queryContextReq);
|
||||
} catch (Exception e) {
|
||||
|
||||
}
|
||||
LOGGER.info("QueryResultResp queryResultResp:{}", JsonUtil.toString(queryResultResp));
|
||||
//assert queryState
|
||||
Assert.assertEquals(queryResultResp.getQueryState(), 0);
|
||||
//assert queryMode
|
||||
Assert.assertEquals(queryResultResp.getQueryMode(), EntityListFilter.QUERY_MODE);
|
||||
//assert aggType
|
||||
Assert.assertEquals(queryResultResp.getChatContext().getAggType(), null);
|
||||
//assert 主题域Id
|
||||
assertThat(queryResultResp.getChatContext().getDomainId()).isEqualTo(2L);
|
||||
|
||||
//assert 指标
|
||||
Set<SchemaItem> metrics = queryResultResp.getChatContext().getMetrics();
|
||||
SchemaItem schemaItemMetric = DataUtils.getSchemaItem(4L, "播放量", "js_play_cnt");
|
||||
Boolean metricExist = DataUtils.compareSchemaItem(metrics, schemaItemMetric);
|
||||
assertThat(metricExist).isEqualTo(true);
|
||||
|
||||
//assert 维度
|
||||
Set<SchemaItem> dimensions = queryResultResp.getChatContext().getDimensions();
|
||||
SchemaItem schemaItemDimension = DataUtils.getSchemaItem(7L, "歌手名", "singer_name");
|
||||
Boolean dimensionExist = DataUtils.compareSchemaItem(dimensions, schemaItemDimension);
|
||||
assertThat(dimensionExist).isEqualTo(true);
|
||||
|
||||
SchemaItem schemaItemDimension1 = DataUtils.getSchemaItem(6L, "风格", "genre");
|
||||
Boolean dimensionExist1 = DataUtils.compareSchemaItem(dimensions, schemaItemDimension1);
|
||||
assertThat(dimensionExist1).isEqualTo(true);
|
||||
|
||||
//assert 维度filter
|
||||
Set<Filter> dimensionFilters = queryResultResp.getChatContext().getDimensionFilters();
|
||||
List<String> list = new ArrayList<>();
|
||||
list.add("爱情");
|
||||
list.add("流行");
|
||||
Filter dimensionFilter = DataUtils.getFilter("genre", FilterOperatorEnum.IN, list, "风格", 6L);
|
||||
Boolean dimensionFilterExist = DataUtils.compareDimensionFilter(dimensionFilters, dimensionFilter);
|
||||
assertThat(dimensionFilterExist).isEqualTo(true);
|
||||
|
||||
//assert 时间filter
|
||||
DateConf dateInfo = DataUtils.getDateConf(1, DateConf.DateMode.RECENT_UNITS, "DAY");
|
||||
Boolean timeFilterExist = DataUtils.compareDate(queryResultResp.getChatContext().getDateInfo(), dateInfo);
|
||||
assertThat(timeFilterExist).isEqualTo(true);
|
||||
|
||||
//assert nativeQuery
|
||||
assertThat(queryResultResp.getChatContext().getNativeQuery()).isEqualTo(true);
|
||||
|
||||
}
|
||||
|
||||
//case:近3天访问次数最多的用户,queryMode:ENTITY_detail
|
||||
@Test
|
||||
public void queryTest_11() {
|
||||
QueryContextReq queryContextReq = DataUtils.getQueryContextReq(1, "艺人周杰伦的代表作、风格、活跃区域");
|
||||
QueryResultResp queryResultResp = new QueryResultResp();
|
||||
try {
|
||||
queryResultResp = queryService.executeQuery(queryContextReq);
|
||||
} catch (Exception e) {
|
||||
|
||||
}
|
||||
LOGGER.info("QueryResultResp queryResultResp:{}", queryResultResp);
|
||||
//assert queryState
|
||||
Assert.assertEquals(queryResultResp.getQueryState(), 0);
|
||||
//assert queryMode
|
||||
Assert.assertEquals(queryResultResp.getQueryMode(), EntityDetail.QUERY_MODE);
|
||||
//assert aggType
|
||||
Assert.assertEquals(queryResultResp.getChatContext().getAggType(), null);
|
||||
//assert 主题域Id
|
||||
assertThat(queryResultResp.getChatContext().getDomainId()).isEqualTo(2L);
|
||||
|
||||
|
||||
//assert 维度
|
||||
Set<SchemaItem> dimensions = queryResultResp.getChatContext().getDimensions();
|
||||
SchemaItem schemaItemDimension = DataUtils.getSchemaItem(5L, "代表作", "song_name");
|
||||
Boolean dimensionExist = DataUtils.compareSchemaItem(dimensions, schemaItemDimension);
|
||||
assertThat(dimensionExist).isEqualTo(true);
|
||||
|
||||
SchemaItem schemaItemDimension1 = DataUtils.getSchemaItem(4L, "活跃区域", "act_area");
|
||||
Boolean dimensionExist1 = DataUtils.compareSchemaItem(dimensions, schemaItemDimension1);
|
||||
assertThat(dimensionExist1).isEqualTo(true);
|
||||
|
||||
SchemaItem schemaItemDimension2 = DataUtils.getSchemaItem(6L, "风格", "genre");
|
||||
Boolean dimensionExist2 = DataUtils.compareSchemaItem(dimensions, schemaItemDimension2);
|
||||
assertThat(dimensionExist2).isEqualTo(true);
|
||||
|
||||
//assert 维度filter
|
||||
Set<Filter> dimensionFilters = queryResultResp.getChatContext().getDimensionFilters();
|
||||
Filter dimensionFilter = DataUtils.getFilter("singer_name", FilterOperatorEnum.EQUALS, "周杰伦", "歌手名", 7L);
|
||||
Boolean dimensionFilterExist = DataUtils.compareDimensionFilter(dimensionFilters, dimensionFilter);
|
||||
assertThat(dimensionFilterExist).isEqualTo(true);
|
||||
|
||||
//assert 时间filter
|
||||
DateConf dateInfo = DataUtils.getDateConf(1, DateConf.DateMode.RECENT_UNITS, "DAY");
|
||||
Boolean timeFilterExist = DataUtils.compareDate(queryResultResp.getChatContext().getDateInfo(), dateInfo);
|
||||
assertThat(timeFilterExist).isEqualTo(true);
|
||||
|
||||
//assert nativeQuery
|
||||
assertThat(queryResultResp.getChatContext().getNativeQuery()).isEqualTo(true);
|
||||
|
||||
}
|
||||
|
||||
// @Test
|
||||
// public void queryTest_11() {
|
||||
// QueryContextReq queryContextReq = DataUtils.getQueryContextReq("最近4天HR部门的访问人数");
|
||||
// try {
|
||||
// QueryResultResp queryResultResp = queryService.executeQuery(queryContextReq);
|
||||
// } catch (Exception e) {
|
||||
// e.printStackTrace();
|
||||
// }
|
||||
// }
|
||||
//case:各部门对各页面的访问次数,queryMode:METRIC_GROUPBY
|
||||
// @Test
|
||||
// public void queryTest_08() {
|
||||
// QueryContextReq queryContextReq = DataUtils.getQueryContextReq(3, "各部门对各页面的访问次数");
|
||||
// QueryResultResp queryResultResp = new QueryResultResp();
|
||||
// try {
|
||||
// queryResultResp = queryService.executeQuery(queryContextReq);
|
||||
// } catch (Exception e) {
|
||||
//
|
||||
// }
|
||||
// LOGGER.info("QueryResultResp queryResultResp:{}", JsonUtil.toString(queryResultResp));
|
||||
// //assert queryState
|
||||
// Assert.assertEquals(queryResultResp.getQueryState(), 0);
|
||||
// //assert queryMode
|
||||
// Assert.assertEquals(queryResultResp.getQueryMode(), MetricGroupBy.QUERY_MODE);
|
||||
// //assert aggType
|
||||
// Assert.assertEquals(queryResultResp.getChatContext().getAggType(), null);
|
||||
// //assert 主题域Id
|
||||
// assertThat(queryResultResp.getChatContext().getDomainId()).isEqualTo(1L);
|
||||
//
|
||||
// //assert 指标
|
||||
// Set<SchemaItem> metrics = queryResultResp.getChatContext().getMetrics();
|
||||
// SchemaItem schemaItemMetric = DataUtils.getSchemaItem(2L, "访问次数", "pv");
|
||||
// Boolean metricExist = DataUtils.compareSchemaItem(metrics, schemaItemMetric);
|
||||
// assertThat(metricExist).isEqualTo(true);
|
||||
//
|
||||
// //assert 维度
|
||||
// Set<SchemaItem> dimensions = queryResultResp.getChatContext().getDimensions();
|
||||
// Boolean dimensionExist = DataUtils.compareDateDimension(dimensions);
|
||||
// assertThat(dimensionExist).isEqualTo(true);
|
||||
//
|
||||
// SchemaItem schemaItemDimension1 = DataUtils.getSchemaItem(1L, "部门", "department");
|
||||
// Boolean dimensionExist1 = DataUtils.compareSchemaItem(dimensions, schemaItemDimension1);
|
||||
// assertThat(dimensionExist1).isEqualTo(true);
|
||||
//
|
||||
// SchemaItem schemaItemDimension2 = DataUtils.getSchemaItem(3L, "页面", "page");
|
||||
// Boolean dimensionExist2 = DataUtils.compareSchemaItem(dimensions, schemaItemDimension2);
|
||||
// assertThat(dimensionExist2).isEqualTo(true);
|
||||
//
|
||||
//
|
||||
// //assert 时间filter
|
||||
// DateConf dateInfo = DataUtils.getDateConf(7, DateConf.DateMode.RECENT_UNITS, "DAY");
|
||||
// Boolean timeFilterExist = DataUtils.compareDate(queryResultResp.getChatContext().getDateInfo(), dateInfo);
|
||||
// assertThat(timeFilterExist).isEqualTo(true);
|
||||
//
|
||||
// //assert nativeQuery
|
||||
// assertThat(queryResultResp.getChatContext().getNativeQuery()).isEqualTo(false);
|
||||
//
|
||||
// }
|
||||
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package com.tencent.supersonic.integration.plugin;
|
||||
|
||||
import com.tencent.supersonic.StandaloneLauncher;
|
||||
import com.tencent.supersonic.chat.api.pojo.response.QueryResult;
|
||||
import com.tencent.supersonic.chat.api.pojo.response.QueryState;
|
||||
import com.tencent.supersonic.chat.query.plugin.WebBase;
|
||||
import com.tencent.supersonic.chat.query.plugin.webpage.WebPageQuery;
|
||||
import com.tencent.supersonic.chat.query.plugin.webpage.WebPageResponse;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.junit.Assert;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.test.context.ActiveProfiles;
|
||||
import org.springframework.test.context.junit4.SpringRunner;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest(classes = StandaloneLauncher.class)
|
||||
@ActiveProfiles("local")
|
||||
@Slf4j
|
||||
public class BasePluginTest {
|
||||
|
||||
protected void assertPluginRecognizeResult(QueryResult queryResult) {
|
||||
Assert.assertEquals(queryResult.getQueryState(), QueryState.SUCCESS);
|
||||
Assert.assertEquals(queryResult.getQueryMode(), WebPageQuery.QUERY_MODE);
|
||||
WebPageResponse webPageResponse = (WebPageResponse) queryResult.getResponse();
|
||||
WebBase webPage = webPageResponse.getWebPage();
|
||||
Assert.assertEquals(webPage.getUrl(), "www.test.com");
|
||||
Map<String, Object> valueParams = webPage.getValueParams();
|
||||
Assert.assertEquals(valueParams.get("name"), "alice");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package com.tencent.supersonic.integration.plugin;
|
||||
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.tencent.supersonic.chat.parser.embedding.EmbeddingConfig;
|
||||
import com.tencent.supersonic.chat.parser.embedding.EmbeddingResp;
|
||||
import com.tencent.supersonic.chat.parser.embedding.RecallRetrieval;
|
||||
import com.tencent.supersonic.chat.plugin.PluginManager;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
@Configuration
|
||||
@Slf4j
|
||||
public class PluginMockConfiguration {
|
||||
|
||||
public static void mockEmbeddingRecognize(PluginManager pluginManager, String text, String id) {
|
||||
EmbeddingResp embeddingResp = new EmbeddingResp();
|
||||
RecallRetrieval embeddingRetrieval = new RecallRetrieval();
|
||||
embeddingRetrieval.setId(id);
|
||||
embeddingRetrieval.setPresetId(id);
|
||||
embeddingRetrieval.setDistance("0.15");
|
||||
embeddingResp.setQuery(text);
|
||||
embeddingResp.setRetrieval(Lists.newArrayList(embeddingRetrieval));
|
||||
when(pluginManager.recognize(text)).thenReturn(embeddingResp);
|
||||
}
|
||||
|
||||
public static void mockEmbeddingUrl(EmbeddingConfig embeddingConfig) {
|
||||
when(embeddingConfig.getUrl()).thenReturn("test");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
package com.tencent.supersonic.integration.plugin;
|
||||
|
||||
import com.tencent.supersonic.chat.api.pojo.request.QueryFilter;
|
||||
import com.tencent.supersonic.chat.api.pojo.request.QueryFilters;
|
||||
import com.tencent.supersonic.chat.api.pojo.request.QueryRequest;
|
||||
import com.tencent.supersonic.chat.api.pojo.response.QueryResult;
|
||||
import com.tencent.supersonic.chat.parser.embedding.EmbeddingConfig;
|
||||
import com.tencent.supersonic.chat.plugin.PluginManager;
|
||||
import com.tencent.supersonic.chat.service.QueryService;
|
||||
import com.tencent.supersonic.util.DataUtils;
|
||||
import org.junit.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.boot.test.mock.mockito.MockBean;
|
||||
|
||||
public class PluginRecognizeTest extends BasePluginTest{
|
||||
|
||||
@MockBean
|
||||
private EmbeddingConfig embeddingConfig;
|
||||
|
||||
@MockBean
|
||||
protected PluginManager pluginManager;
|
||||
|
||||
@Autowired
|
||||
@Qualifier("chatQueryService")
|
||||
private QueryService queryService;
|
||||
|
||||
@Test
|
||||
public void webPageRecognize() throws Exception {
|
||||
PluginMockConfiguration.mockEmbeddingRecognize(pluginManager, "最近的访问情况怎么样","1");
|
||||
PluginMockConfiguration.mockEmbeddingUrl(embeddingConfig);
|
||||
QueryRequest queryContextReq = DataUtils.getQueryContextReq(1000, "alice最近的访问情况怎么样");
|
||||
QueryResult queryResult = queryService.executeQuery(queryContextReq);
|
||||
assertPluginRecognizeResult(queryResult);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void webPageRecognizeWithQueryFilter() throws Exception {
|
||||
PluginMockConfiguration.mockEmbeddingRecognize(pluginManager, "在超音数最近的情况怎么样","1");
|
||||
PluginMockConfiguration.mockEmbeddingUrl(embeddingConfig);
|
||||
QueryRequest queryRequest = DataUtils.getQueryContextReq(1000, "在超音数最近的情况怎么样");
|
||||
QueryFilters queryFilters = new QueryFilters();
|
||||
QueryFilter queryFilter = new QueryFilter();
|
||||
queryFilter.setElementID(2L);
|
||||
queryFilter.setValue("alice");
|
||||
queryFilters.getFilters().add(queryFilter);
|
||||
queryRequest.setQueryFilters(queryFilters);
|
||||
QueryResult queryResult = queryService.executeQuery(queryRequest);
|
||||
assertPluginRecognizeResult(queryResult);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,35 +1,56 @@
|
||||
package com.tencent.supersonic.util;
|
||||
|
||||
import com.tencent.supersonic.auth.api.authentication.pojo.User;
|
||||
import com.tencent.supersonic.chat.api.pojo.Filter;
|
||||
import com.tencent.supersonic.chat.api.request.QueryContextReq;
|
||||
import com.tencent.supersonic.chat.api.pojo.SchemaElement;
|
||||
import com.tencent.supersonic.chat.api.pojo.SchemaElementType;
|
||||
import com.tencent.supersonic.chat.api.pojo.request.QueryFilter;
|
||||
import com.tencent.supersonic.chat.api.pojo.request.QueryRequest;
|
||||
import com.tencent.supersonic.common.pojo.DateConf;
|
||||
import com.tencent.supersonic.common.pojo.SchemaItem;
|
||||
import com.tencent.supersonic.semantic.api.query.enums.FilterOperatorEnum;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
public class DataUtils {
|
||||
|
||||
public static QueryContextReq getQueryContextReq(Integer id,String query) {
|
||||
QueryContextReq queryContextReq = new QueryContextReq();
|
||||
public static QueryRequest getQueryContextReq(Integer id, String query) {
|
||||
QueryRequest queryContextReq = new QueryRequest();
|
||||
queryContextReq.setQueryText(query);//"alice的访问次数"
|
||||
queryContextReq.setChatId(id);
|
||||
queryContextReq.setUser(new User(1L, "admin", "admin", "admin@email"));
|
||||
return queryContextReq;
|
||||
}
|
||||
|
||||
public static SchemaItem getSchemaItem(Long id, String name, String bizName) {
|
||||
SchemaItem schemaItem = new SchemaItem();
|
||||
schemaItem.setId(id);
|
||||
schemaItem.setName(name);
|
||||
schemaItem.setBizName(bizName);
|
||||
return schemaItem;
|
||||
public static SchemaElement getSchemaElement(String name) {
|
||||
return SchemaElement.builder()
|
||||
.name(name)
|
||||
.build();
|
||||
}
|
||||
|
||||
public static Filter getFilter(String bizName, FilterOperatorEnum filterOperatorEnum, Object value, String name,
|
||||
Long elementId) {
|
||||
Filter filter = new Filter();
|
||||
public static SchemaElement getMetric(Long domainId, Long id, String name, String bizName) {
|
||||
return SchemaElement.builder()
|
||||
.domain(domainId)
|
||||
.id(id)
|
||||
.name(name)
|
||||
.bizName(bizName)
|
||||
.useCnt(0L)
|
||||
.type(SchemaElementType.METRIC)
|
||||
.build();
|
||||
}
|
||||
|
||||
public static SchemaElement getDimension(Long domainId, Long id, String name, String bizName) {
|
||||
return SchemaElement.builder()
|
||||
.domain(domainId)
|
||||
.id(id)
|
||||
.name(name)
|
||||
.bizName(bizName)
|
||||
.useCnt(null)
|
||||
.type(SchemaElementType.DIMENSION)
|
||||
.build();
|
||||
}
|
||||
|
||||
public static QueryFilter getFilter(String bizName, FilterOperatorEnum filterOperatorEnum, Object value, String name,
|
||||
Long elementId) {
|
||||
QueryFilter filter = new QueryFilter();
|
||||
filter.setBizName(bizName);
|
||||
filter.setOperator(filterOperatorEnum);
|
||||
filter.setValue(value);
|
||||
@@ -46,6 +67,13 @@ public class DataUtils {
|
||||
return dateInfo;
|
||||
}
|
||||
|
||||
public static DateConf getDateConf(DateConf.DateMode dateMode, String startDate, String endDate) {
|
||||
DateConf dateInfo = new DateConf();
|
||||
dateInfo.setDateMode(dateMode);
|
||||
dateInfo.setStartDate(startDate);
|
||||
dateInfo.setEndDate(endDate);
|
||||
return dateInfo;
|
||||
}
|
||||
|
||||
public static Boolean compareDate(DateConf dateInfo1, DateConf dateInfo2) {
|
||||
Boolean timeFilterExist = dateInfo1.getUnit().equals(dateInfo2.getUnit()) &&
|
||||
@@ -54,23 +82,11 @@ public class DataUtils {
|
||||
return timeFilterExist;
|
||||
}
|
||||
|
||||
public static Boolean compareSchemaItem(Set<SchemaItem> metrics, SchemaItem schemaItemMetric) {
|
||||
Boolean metricExist = false;
|
||||
for (SchemaItem schemaItem : metrics) {
|
||||
if(schemaItem.getBizName().equals(schemaItemMetric.getBizName()))
|
||||
if (schemaItem.getId()!=null&&schemaItem.getId().equals(schemaItemMetric.getId()) &&
|
||||
schemaItem.getName()!=null&&schemaItem.getName().equals(schemaItemMetric.getName()) ) {
|
||||
metricExist = true;
|
||||
}
|
||||
}
|
||||
return metricExist;
|
||||
}
|
||||
|
||||
public static Boolean compareDateDimension(Set<SchemaItem> dimensions) {
|
||||
SchemaItem schemaItemDimension = new SchemaItem();
|
||||
public static Boolean compareDateDimension(Set<SchemaElement> dimensions) {
|
||||
SchemaElement schemaItemDimension = new SchemaElement();
|
||||
schemaItemDimension.setBizName("sys_imp_date");
|
||||
Boolean dimensionExist = false;
|
||||
for (SchemaItem schemaItem : dimensions) {
|
||||
for (SchemaElement schemaItem : dimensions) {
|
||||
if (schemaItem.getBizName().equals(schemaItemDimension.getBizName())) {
|
||||
dimensionExist = true;
|
||||
}
|
||||
@@ -78,9 +94,9 @@ public class DataUtils {
|
||||
return dimensionExist;
|
||||
}
|
||||
|
||||
public static Boolean compareDimensionFilter(Set<Filter> dimensionFilters, Filter dimensionFilter) {
|
||||
public static Boolean compareDimensionFilter(Set<QueryFilter> dimensionFilters, QueryFilter dimensionFilter) {
|
||||
Boolean dimensionFilterExist = false;
|
||||
for (Filter filter : dimensionFilters) {
|
||||
for (QueryFilter filter : dimensionFilters) {
|
||||
if (filter.getBizName().equals(dimensionFilter.getBizName()) &&
|
||||
filter.getOperator().equals(dimensionFilter.getOperator()) &&
|
||||
filter.getValue().toString().equals(dimensionFilter.getValue().toString()) &&
|
||||
|
||||
@@ -1,20 +1,21 @@
|
||||
com.tencent.supersonic.chat.api.component.SchemaMapper=\
|
||||
com.tencent.supersonic.chat.application.mapper.HanlpSchemaMapper
|
||||
com.tencent.supersonic.chat.mapper.HanlpDictMapper
|
||||
|
||||
com.tencent.supersonic.chat.api.component.SemanticParser=\
|
||||
com.tencent.supersonic.chat.application.parser.DomainSemanticParser, \
|
||||
com.tencent.supersonic.chat.application.parser.TimeSemanticParser, \
|
||||
com.tencent.supersonic.chat.application.parser.AggregateSemanticParser
|
||||
# com.tencent.supersonic.chat.application.parser.LLMSemanticParser
|
||||
com.tencent.supersonic.chat.parser.rule.QueryModeParser, \
|
||||
com.tencent.supersonic.chat.parser.rule.ContextInheritParser, \
|
||||
com.tencent.supersonic.chat.parser.rule.TimeRangeParser, \
|
||||
com.tencent.supersonic.chat.parser.rule.AggregateTypeParser
|
||||
# com.tencent.supersonic.chat.parser.llm.DSLQueryFunction
|
||||
|
||||
com.tencent.supersonic.chat.api.component.QueryProcessor=\
|
||||
com.tencent.supersonic.chat.application.processor.SemanticQueryProcessor
|
||||
|
||||
com.tencent.supersonic.chat.api.component.SemanticLayer=\
|
||||
com.tencent.supersonic.chat.infrastructure.semantic.LocalSemanticLayerImpl
|
||||
com.tencent.supersonic.knowledge.semantic.LocalSemanticLayer
|
||||
|
||||
com.tencent.supersonic.chat.application.query.QuerySelector=\
|
||||
com.tencent.supersonic.chat.application.query.HeuristicQuerySelector
|
||||
com.tencent.supersonic.chat.query.QuerySelector=\
|
||||
com.tencent.supersonic.chat.query.HeuristicQuerySelector
|
||||
|
||||
com.tencent.supersonic.chat.application.query.DomainResolver=\
|
||||
com.tencent.supersonic.chat.application.query.HeuristicDomainResolver
|
||||
|
||||
@@ -6,8 +6,8 @@ insert into s2_user (id, `name`, password, display_name, email) values (4, 'lucy
|
||||
|
||||
--insert into s2_chat_config (`id` ,`domain_id` ,`default_metrics`,`visibility`,`entity_info` ,`dictionary_info`,`created_at`,`updated_at`,`created_by`,`updated_by`,`status` ) values (1,1,'[{"metricId":1,"unit":7,"period":"DAY"}]','{"blackDimIdList":[],"blackMetricIdList":[]}','{"entityIds":[2],"names":["用户","用户姓名"],"detailData":{"dimensionIds":[1,2],"metricIds":[2]}}','[{"itemId":1,"type":"DIMENSION","blackList":[],"isDictInfo":true},{"itemId":2,"type":"DIMENSION","blackList":[],"isDictInfo":true},{"itemId":3,"type":"DIMENSION","blackList":[],"isDictInfo":true}]','2023-05-24 18:00:00','2023-05-25 11:00:00','admin','admin',1);
|
||||
insert into s2_chat_config (`id` ,`domain_id` ,`chat_detail_config`,`chat_agg_config`,`created_at`,`updated_at`,`created_by`,`updated_by`,`status` )
|
||||
values (1,1,'{"visibility":{"blackDimIdList":[1],"blackMetricIdList":[2]},"knowledgeInfos":[{"itemId":2,"type":"DIMENSION","searchEnable":true}],"chatDefaultConfig":{"dimensionIds":[1,2],"metricIds":[1],"unit":1,"period":"DAY"},"entity":null}',
|
||||
'{"visibility":{"blackDimIdList":[3],"blackMetricIdList":[3]},"knowledgeInfos":[{"itemId":2,"type":"DIMENSION","searchEnable":true}],"chatDefaultConfig":{"dimensionIds":[1,2],"metricIds":[1],"unit":1,"period":"DAY"}}',
|
||||
values (1,1,'{"visibility":{"blackDimIdList":[],"blackMetricIdList":[]},"knowledgeInfos":[{"itemId":2,"type":"DIMENSION","searchEnable":true}],"chatDefaultConfig":{"dimensionIds":[1,2],"metricIds":[1],"unit":7,"period":"DAY"},"entity":null}',
|
||||
'{"visibility":{"blackDimIdList":[],"blackMetricIdList":[]},"knowledgeInfos":[{"itemId":2,"type":"DIMENSION","searchEnable":true}],"chatDefaultConfig":{"dimensionIds":[1,2],"metricIds":[1],"ratioMetricIds":[2],"unit":7,"period":"DAY"}}',
|
||||
'2023-05-24 18:00:00','2023-05-25 11:00:00','admin','admin',1);
|
||||
insert into s2_chat_config (`id` ,`domain_id` ,`chat_detail_config`,`chat_agg_config`,`created_at`,`updated_at`,`created_by`,`updated_by`,`status` )
|
||||
values (2,2,'{"visibility":{"blackDimIdList":[],"blackMetricIdList":[]},"knowledgeInfos":[{"itemId":7,"type":"DIMENSION","searchEnable":true}],"chatDefaultConfig":{"dimensionIds":[4,5,6,7],"metricIds":[4],"unit":7,"period":"DAY"},"entity":{"entityId":1,"names":["歌手","艺人"]}}',
|
||||
@@ -27,6 +27,8 @@ insert into s2_chat_query (`question_id`,`create_time`,`query_text`,`user_name`,
|
||||
insert into s2_chat_query (`question_id`,`create_time`,`query_text`,`user_name`,`query_state`,`chat_id`,`query_response`,`score`,`feedback`) VALUES(5, '2023-06-10 10:41:48.211','停留时长','admin',0,2,'{"queryMode":"METRIC_FILTER","querySql":"SELECT `sys_imp_date` , `stay_hours` FROM ( SELECT `sys_imp_date` , `s2_stay_time_statis_stay_hours` AS `stay_hours` FROM ( SELECT SUM ( `s2_stay_time_statis_stay_hours` ) AS `s2_stay_time_statis_stay_hours` , `sys_imp_date` FROM ( SELECT `user_name` , `stay_hours` AS `s2_stay_time_statis_stay_hours` , `imp_date` AS `sys_imp_date` FROM ( SELECT `imp_date` , `page` , `user_name` , `stay_hours` FROM `s2_stay_time_statis` ) AS `s2_stay_time_statis` ) AS `src00_s2_stay_time_statis_df18` WHERE ( `sys_imp_date` >= ''2023-06-03'' AND `sys_imp_date` <= ''2023-06-09'' AND `user_name` = ''alice'' ) GROUP BY `sys_imp_date` ) AS `s2_stay_time_statis_0` ) AS `s2_stay_time_statis_1` LIMIT 10","queryState":0,"queryColumns":[{"name":"date","type":"VARCHAR","nameEn":"sys_imp_date","showType":"DATE","authorized":true},{"name":"停留时长","type":"DOUBLE","nameEn":"stay_hours","showType":"NUMBER","authorized":true}],"entityInfo":{"domainInfo":{"itemId":1,"name":"超音数","bizName":"supersonic","words":["用户","用户姓名"],"primaryEntityBizName":"user_name"},"dimensions":[{"itemId":1,"name":"部门","bizName":"department","value":"sales"},{"itemId":2,"name":"用户名","bizName":"user_name","value":"alice"}],"metrics":[{"itemId":2,"name":"访问次数","bizName":"pv","value":"2"}],"entityId":"alice"},"chatContext":{"queryMode":"METRIC_FILTER","domainId":1,"domainName":"超音数","entity":0,"metrics":[{"id":1,"name":"停留时长","bizName":"stay_hours","status":1,"sensitiveLevel":0}],"dimensions":[{"bizName":"sys_imp_date","status":1,"sensitiveLevel":0}],"dimensionFilters":[{"bizName":"user_name","name":"用户名","operator":"=","value":"alice","elementID":2}],"metricFilters":[],"orders":[],"dateInfo":{"dateMode":"RECENT_UNITS","startDate":"2023-06-03","endDate":"2023-06-09","dateList":[],"unit":7,"period":"DAY"},"limit":10,"nativeQuery":false},"queryResults":[{"sys_imp_date":"2023-06-03","stay_hours":0.5963801306980994},{"sys_imp_date":"2023-06-04","stay_hours":1.5120376931855422},{"sys_imp_date":"2023-06-06","stay_hours":3.7790223355266317},{"sys_imp_date":"2023-06-07","stay_hours":0.8654528466186735},{"sys_imp_date":"2023-06-08","stay_hours":0.9796159603778489},{"sys_imp_date":"2023-06-09","stay_hours":0.6705580511822682}]}',0,'');
|
||||
insert into s2_chat_query (`question_id`,`create_time`,`query_text`,`user_name`,`query_state`,`chat_id`,`query_response`,`score`,`feedback`) VALUES(6, '2023-06-10 10:42:02.184','访问','admin',0,2,'{"queryMode":"METRIC_FILTER","querySql":"SELECT `sys_imp_date` , `stay_hours` FROM ( SELECT `sys_imp_date` , `s2_stay_time_statis_stay_hours` AS `stay_hours` FROM ( SELECT SUM ( `s2_stay_time_statis_stay_hours` ) AS `s2_stay_time_statis_stay_hours` , `sys_imp_date` FROM ( SELECT `user_name` , `stay_hours` AS `s2_stay_time_statis_stay_hours` , `imp_date` AS `sys_imp_date` FROM ( SELECT `imp_date` , `page` , `user_name` , `stay_hours` FROM `s2_stay_time_statis` ) AS `s2_stay_time_statis` ) AS `src00_s2_stay_time_statis_df18` WHERE ( `sys_imp_date` >= ''2023-06-03'' AND `sys_imp_date` <= ''2023-06-09'' AND `user_name` = ''alice'' ) GROUP BY `sys_imp_date` ) AS `s2_stay_time_statis_0` ) AS `s2_stay_time_statis_1` LIMIT 10","queryState":0,"queryColumns":[{"name":"date","type":"VARCHAR","nameEn":"sys_imp_date","showType":"DATE","authorized":true},{"name":"停留时长","type":"DOUBLE","nameEn":"stay_hours","showType":"NUMBER","authorized":true}],"entityInfo":{"domainInfo":{"itemId":1,"name":"超音数","bizName":"supersonic","words":["用户","用户姓名"],"primaryEntityBizName":"user_name"},"dimensions":[{"itemId":1,"name":"部门","bizName":"department","value":"sales"},{"itemId":2,"name":"用户名","bizName":"user_name","value":"alice"}],"metrics":[{"itemId":2,"name":"访问次数","bizName":"pv","value":"2"}],"entityId":"alice"},"chatContext":{"queryMode":"METRIC_FILTER","domainId":1,"domainName":"超音数","entity":0,"metrics":[{"id":1,"name":"停留时长","bizName":"stay_hours","status":1,"sensitiveLevel":0}],"dimensions":[{"bizName":"sys_imp_date","status":1,"sensitiveLevel":0}],"dimensionFilters":[{"bizName":"user_name","name":"用户名","operator":"=","value":"alice","elementID":2}],"metricFilters":[],"orders":[],"dateInfo":{"dateMode":"RECENT_UNITS","startDate":"2023-06-03","endDate":"2023-06-09","dateList":[],"unit":7,"period":"DAY"},"limit":10,"nativeQuery":false},"queryResults":[{"sys_imp_date":"2023-06-03","stay_hours":0.5963801306980994},{"sys_imp_date":"2023-06-04","stay_hours":1.5120376931855422},{"sys_imp_date":"2023-06-06","stay_hours":3.7790223355266317},{"sys_imp_date":"2023-06-07","stay_hours":0.8654528466186735},{"sys_imp_date":"2023-06-08","stay_hours":0.9796159603778489},{"sys_imp_date":"2023-06-09","stay_hours":0.6705580511822682}]}',0,'');
|
||||
|
||||
insert into s2_plugin (id, `type`, `domain`, pattern, parse_mode, `name`, created_at, created_by, updated_at, updated_by, config) VALUES (1, 'WEB_PAGE', 1, '访问情况', 'EMBEDDING_RECALL', '访问情况', '2023-06-11 19:36:47', 'admin', '2023-06-21 15:26:46', 'admin', '{"params":{"name":"2"}, "url":"www.test.com"}');
|
||||
insert into s2_plugin (id, `type`, `domain`, pattern, parse_mode, `name`, created_at, created_by, updated_at, updated_by, config) VALUES (2, 'WEB_PAGE', 2, '播放表现', 'EMBEDDING_RECALL', '播放表现', '2023-06-11 19:36:47', 'admin', '2023-06-21 15:26:46', 'admin', '{"params":{"name":"7"}, "url":"www.test.com"}');
|
||||
|
||||
-- semantic data
|
||||
insert into s2_database (id, domain_id , `name`, description, `type` ,config ,created_at ,created_by ,updated_at ,updated_by) VALUES(1, 1, 'H2数据实例', '', 'h2', '{"password":"semantic","url":"jdbc:h2:mem:semantic;DATABASE_TO_UPPER=false","userName":"root"}', '2023-05-24 00:00:00', 'admin', '2023-05-24 00:00:00', 'admin');
|
||||
|
||||
@@ -44,6 +44,7 @@ CREATE TABLE IF NOT EXISTS `s2_chat_config` (
|
||||
`domain_id` INT DEFAULT NULL ,
|
||||
`chat_detail_config` varchar(655) ,
|
||||
`chat_agg_config` varchar(655) ,
|
||||
`recommended_questions` varchar(1500) ,
|
||||
`created_at` TIMESTAMP NOT NULL ,
|
||||
`updated_at` TIMESTAMP NOT NULL ,
|
||||
`created_by` varchar(100) NOT NULL ,
|
||||
@@ -117,6 +118,7 @@ CREATE TABLE IF NOT EXISTS `s2_domain` (
|
||||
`is_open` TINYINT DEFAULT NULL , -- whether the domain is public
|
||||
`viewer` varchar(3000) DEFAULT NULL , -- domain available users
|
||||
`view_org` varchar(3000) DEFAULT NULL , -- domain available organization
|
||||
`entity` varchar(500) DEFAULT NULL , -- domain entity info
|
||||
PRIMARY KEY (`id`)
|
||||
);
|
||||
COMMENT ON TABLE s2_domain IS 'domain basic information';
|
||||
@@ -127,6 +129,7 @@ CREATE TABLE `s2_database` (
|
||||
`domain_id` INT NOT NULL ,
|
||||
`name` varchar(255) NOT NULL ,
|
||||
`description` varchar(500) DEFAULT NULL ,
|
||||
`version` varchar(64) DEFAULT NULL ,
|
||||
`type` varchar(20) NOT NULL , -- type: mysql,clickhouse,tdw
|
||||
`config` varchar(655) NOT NULL ,
|
||||
`created_at` TIMESTAMP NOT NULL ,
|
||||
@@ -201,6 +204,7 @@ CREATE TABLE IF NOT EXISTS `s2_dimension` (
|
||||
`semantic_type` varchar(20) NOT NULL, -- semantic type: DATE, ID, CATEGORY
|
||||
`alias` varchar(500) DEFAULT NULL,
|
||||
`default_values` varchar(500) DEFAULT NULL,
|
||||
`dim_value_maps` varchar(500) DEFAULT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
);
|
||||
COMMENT ON TABLE s2_dimension IS 'dimension information table';
|
||||
@@ -309,6 +313,22 @@ CREATE TABLE IF NOT EXISTS `s2_available_date_info` (
|
||||
);
|
||||
COMMENT ON TABLE s2_dimension IS 'dimension information table';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `s2_plugin`
|
||||
(
|
||||
`id` INT AUTO_INCREMENT,
|
||||
`type` varchar(50) NULL,
|
||||
`domain` varchar(100) NULL,
|
||||
`pattern` varchar(500) NULL,
|
||||
`parse_mode` varchar(100) NULL,
|
||||
`name` varchar(100) NULL,
|
||||
`created_at` TIMESTAMP NULL,
|
||||
`created_by` varchar(100) null,
|
||||
`updated_at` TIMESTAMP NULL,
|
||||
`updated_by` varchar(100) NULL,
|
||||
`config` LONGVARCHAR NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
); COMMENT ON TABLE s2_plugin IS 'plugin information table';
|
||||
|
||||
|
||||
-------demo for semantic and chat
|
||||
CREATE TABLE IF NOT EXISTS `s2_user_department` (
|
||||
|
||||
Reference in New Issue
Block a user