mirror of
https://github.com/tencentmusic/supersonic.git
synced 2025-12-12 12:37:55 +00:00
(improvement)(Headless) Change queryMode TAG_MODE to DETAIL_MODE (#1050)
This commit is contained in:
@@ -13,16 +13,15 @@ import com.tencent.supersonic.headless.core.chat.query.llm.s2sql.LLMSqlQuery;
|
||||
import com.tencent.supersonic.headless.core.chat.query.rule.RuleSemanticQuery;
|
||||
import com.tencent.supersonic.headless.core.pojo.ChatContext;
|
||||
import com.tencent.supersonic.headless.core.pojo.QueryContext;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
/**
|
||||
* QueryTypeParser resolves query type as either METRIC or TAG, or ID.
|
||||
*/
|
||||
@@ -73,7 +72,7 @@ public class QueryTypeParser implements SemanticParser {
|
||||
//If all the fields in the SELECT/WHERE statement are of tag type.
|
||||
if (CollectionUtils.isNotEmpty(tags)
|
||||
&& tags.containsAll(selectWhereFilterByTimeFields)) {
|
||||
return QueryType.TAG;
|
||||
return QueryType.DETAIL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ package com.tencent.supersonic.headless.core.chat.query;
|
||||
import com.tencent.supersonic.headless.core.chat.query.llm.LLMSemanticQuery;
|
||||
import com.tencent.supersonic.headless.core.chat.query.rule.RuleSemanticQuery;
|
||||
import com.tencent.supersonic.headless.core.chat.query.rule.metric.MetricSemanticQuery;
|
||||
import com.tencent.supersonic.headless.core.chat.query.rule.tag.TagSemanticQuery;
|
||||
import com.tencent.supersonic.headless.core.chat.query.rule.detail.DetailSemanticQuery;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -70,7 +70,7 @@ public class QueryManager {
|
||||
if (queryMode == null || !ruleQueryMap.containsKey(queryMode)) {
|
||||
return false;
|
||||
}
|
||||
return ruleQueryMap.get(queryMode) instanceof TagSemanticQuery;
|
||||
return ruleQueryMap.get(queryMode) instanceof DetailSemanticQuery;
|
||||
}
|
||||
|
||||
public static RuleSemanticQuery getRuleQuery(String queryMode) {
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
package com.tencent.supersonic.headless.core.chat.query.rule.tag;
|
||||
package com.tencent.supersonic.headless.core.chat.query.rule.detail;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import static com.tencent.supersonic.headless.api.pojo.SchemaElementType.VALUE;
|
||||
import static com.tencent.supersonic.headless.core.chat.query.rule.QueryMatchOption.OptionType.REQUIRED;
|
||||
import static com.tencent.supersonic.headless.core.chat.query.rule.QueryMatchOption.RequireNumberType.AT_LEAST;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Slf4j
|
||||
@Component
|
||||
public class TagFilterQuery extends TagListQuery {
|
||||
public class DetailFilterQuery extends DetailListQuery {
|
||||
|
||||
public static final String QUERY_MODE = "TAG_LIST_FILTER";
|
||||
public static final String QUERY_MODE = "DETAIL_LIST_FILTER";
|
||||
|
||||
public TagFilterQuery() {
|
||||
public DetailFilterQuery() {
|
||||
super();
|
||||
queryMatcher.addOption(VALUE, REQUIRED, AT_LEAST, 1);
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.core.chat.query.rule.tag;
|
||||
package com.tencent.supersonic.headless.core.chat.query.rule.detail;
|
||||
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@@ -7,11 +7,11 @@ import static com.tencent.supersonic.headless.core.chat.query.rule.QueryMatchOpt
|
||||
import static com.tencent.supersonic.headless.api.pojo.SchemaElementType.ID;
|
||||
|
||||
@Component
|
||||
public class TagIdQuery extends TagListQuery {
|
||||
public class DetailIdQuery extends DetailListQuery {
|
||||
|
||||
public static final String QUERY_MODE = "TAG_ID";
|
||||
public static final String QUERY_MODE = "DETAIL_ID";
|
||||
|
||||
public TagIdQuery() {
|
||||
public DetailIdQuery() {
|
||||
super();
|
||||
queryMatcher.addOption(ID, REQUIRED, AT_LEAST, 1);
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.core.chat.query.rule.tag;
|
||||
package com.tencent.supersonic.headless.core.chat.query.rule.detail;
|
||||
|
||||
import com.tencent.supersonic.common.pojo.Constants;
|
||||
import com.tencent.supersonic.common.pojo.Order;
|
||||
@@ -16,7 +16,7 @@ import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public abstract class TagListQuery extends TagSemanticQuery {
|
||||
public abstract class DetailListQuery extends DetailSemanticQuery {
|
||||
|
||||
@Override
|
||||
public void fillParseInfo(QueryContext queryContext, ChatContext chatContext) {
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.tencent.supersonic.headless.core.chat.query.rule.tag;
|
||||
package com.tencent.supersonic.headless.core.chat.query.rule.detail;
|
||||
|
||||
import com.tencent.supersonic.common.pojo.DateConf;
|
||||
import com.tencent.supersonic.common.pojo.enums.QueryType;
|
||||
@@ -20,11 +20,11 @@ import static com.tencent.supersonic.headless.core.chat.query.rule.QueryMatchOpt
|
||||
import static com.tencent.supersonic.headless.core.chat.query.rule.QueryMatchOption.RequireNumberType.AT_LEAST;
|
||||
|
||||
@Slf4j
|
||||
public abstract class TagSemanticQuery extends RuleSemanticQuery {
|
||||
public abstract class DetailSemanticQuery extends RuleSemanticQuery {
|
||||
|
||||
private static final Long TAG_MAX_RESULTS = 500L;
|
||||
private static final Long DETAIL_MAX_RESULTS = 500L;
|
||||
|
||||
public TagSemanticQuery() {
|
||||
public DetailSemanticQuery() {
|
||||
super();
|
||||
queryMatcher.addOption(ENTITY, REQUIRED, AT_LEAST, 1);
|
||||
}
|
||||
@@ -39,8 +39,8 @@ public abstract class TagSemanticQuery extends RuleSemanticQuery {
|
||||
public void fillParseInfo(QueryContext queryContext, ChatContext chatContext) {
|
||||
super.fillParseInfo(queryContext, chatContext);
|
||||
|
||||
parseInfo.setQueryType(QueryType.TAG);
|
||||
parseInfo.setLimit(TAG_MAX_RESULTS);
|
||||
parseInfo.setQueryType(QueryType.DETAIL);
|
||||
parseInfo.setLimit(DETAIL_MAX_RESULTS);
|
||||
if (parseInfo.getDateInfo() == null) {
|
||||
DataSetSchema dataSetSchema =
|
||||
queryContext.getSemanticSchema().getDataSetSchemaMap().get(parseInfo.getDataSetId());
|
||||
@@ -1,24 +0,0 @@
|
||||
package com.tencent.supersonic.headless.core.chat.query.rule.tag;
|
||||
|
||||
import static com.tencent.supersonic.headless.api.pojo.SchemaElementType.ID;
|
||||
import static com.tencent.supersonic.headless.core.chat.query.rule.QueryMatchOption.OptionType.REQUIRED;
|
||||
import static com.tencent.supersonic.headless.core.chat.query.rule.QueryMatchOption.RequireNumberType.AT_LEAST;
|
||||
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
public class TagDetailQuery extends TagSemanticQuery {
|
||||
|
||||
public static final String QUERY_MODE = "TAG_DETAIL";
|
||||
|
||||
public TagDetailQuery() {
|
||||
super();
|
||||
queryMatcher.addOption(ID, REQUIRED, AT_LEAST, 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getQueryMode() {
|
||||
return QUERY_MODE;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -37,7 +37,7 @@ public class S2SqlDateHelper {
|
||||
return Pair.of(defaultDate, defaultDate);
|
||||
}
|
||||
TimeDefaultConfig defaultConfig = dataSetSchema.getMetricTypeTimeDefaultConfig();
|
||||
if (QueryType.TAG.equals(queryType)) {
|
||||
if (QueryType.DETAIL.equals(queryType)) {
|
||||
defaultConfig = dataSetSchema.getTagTypeTimeDefaultConfig();
|
||||
}
|
||||
return getDefaultDate(defaultDate, defaultConfig);
|
||||
|
||||
@@ -57,11 +57,11 @@ class S2SqlDateHelperTest {
|
||||
Long dataSetId = 1L;
|
||||
QueryContext queryContext = buildQueryContext(dataSetId);
|
||||
|
||||
Pair<String, String> startEndDate = S2SqlDateHelper.getStartEndDate(queryContext, null, QueryType.TAG);
|
||||
Pair<String, String> startEndDate = S2SqlDateHelper.getStartEndDate(queryContext, null, QueryType.DETAIL);
|
||||
Assert.assertEquals(startEndDate.getLeft(), DateUtils.getBeforeDate(0));
|
||||
Assert.assertEquals(startEndDate.getRight(), DateUtils.getBeforeDate(0));
|
||||
|
||||
startEndDate = S2SqlDateHelper.getStartEndDate(queryContext, dataSetId, QueryType.TAG);
|
||||
startEndDate = S2SqlDateHelper.getStartEndDate(queryContext, dataSetId, QueryType.DETAIL);
|
||||
Assert.assertNull(startEndDate.getLeft());
|
||||
Assert.assertNull(startEndDate.getRight());
|
||||
|
||||
@@ -74,7 +74,7 @@ class S2SqlDateHelperTest {
|
||||
queryConfig.getTagTypeDefaultConfig().setTimeDefaultConfig(timeDefaultConfig);
|
||||
queryConfig.getMetricTypeDefaultConfig().setTimeDefaultConfig(timeDefaultConfig);
|
||||
|
||||
startEndDate = S2SqlDateHelper.getStartEndDate(queryContext, dataSetId, QueryType.TAG);
|
||||
startEndDate = S2SqlDateHelper.getStartEndDate(queryContext, dataSetId, QueryType.DETAIL);
|
||||
Assert.assertEquals(startEndDate.getLeft(), DateUtils.getBeforeDate(20));
|
||||
Assert.assertEquals(startEndDate.getRight(), DateUtils.getBeforeDate(20));
|
||||
|
||||
@@ -88,7 +88,7 @@ class S2SqlDateHelperTest {
|
||||
Assert.assertEquals(startEndDate.getLeft(), DateUtils.getBeforeDate(2));
|
||||
Assert.assertEquals(startEndDate.getRight(), DateUtils.getBeforeDate(1));
|
||||
|
||||
startEndDate = S2SqlDateHelper.getStartEndDate(queryContext, dataSetId, QueryType.TAG);
|
||||
startEndDate = S2SqlDateHelper.getStartEndDate(queryContext, dataSetId, QueryType.DETAIL);
|
||||
Assert.assertEquals(startEndDate.getLeft(), DateUtils.getBeforeDate(2));
|
||||
Assert.assertEquals(startEndDate.getRight(), DateUtils.getBeforeDate(1));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user