diff --git a/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/mapper/TimeFieldMapper.java b/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/mapper/TimeFieldMapper.java new file mode 100644 index 000000000..667b405e0 --- /dev/null +++ b/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/mapper/TimeFieldMapper.java @@ -0,0 +1,37 @@ +package com.tencent.supersonic.headless.chat.mapper; + +import com.tencent.supersonic.common.pojo.enums.Text2SQLType; +import com.tencent.supersonic.headless.api.pojo.DataSetSchema; +import com.tencent.supersonic.headless.api.pojo.SchemaElement; +import com.tencent.supersonic.headless.api.pojo.SchemaElementMatch; +import com.tencent.supersonic.headless.chat.ChatQueryContext; +import lombok.extern.slf4j.Slf4j; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Slf4j +public class TimeFieldMapper extends BaseMapper { + + @Override + public void doMap(ChatQueryContext chatQueryContext) { + if (chatQueryContext.getRequest().getText2SQLType().equals(Text2SQLType.ONLY_RULE)) { + return; + } + + Map schemaMap = + chatQueryContext.getSemanticSchema().getDataSetSchemaMap(); + for (Map.Entry entry : schemaMap.entrySet()) { + List timeDims = entry.getValue().getDimensions().stream() + .filter(dim -> dim.getTimeFormat() != null).collect(Collectors.toList()); + for (SchemaElement schemaElement : timeDims) { + chatQueryContext.getMapInfo().getMatchedElements(entry.getKey()) + .add(SchemaElementMatch.builder().word(schemaElement.getName()) + .element(schemaElement).detectWord(schemaElement.getName()) + .similarity(1.0).build()); + } + } + } + +} diff --git a/launchers/headless/src/main/resources/META-INF/spring.factories b/launchers/headless/src/main/resources/META-INF/spring.factories index 918a0baf4..fee393d9f 100644 --- a/launchers/headless/src/main/resources/META-INF/spring.factories +++ b/launchers/headless/src/main/resources/META-INF/spring.factories @@ -4,6 +4,7 @@ com.tencent.supersonic.headless.chat.mapper.SchemaMapper=\ com.tencent.supersonic.headless.chat.mapper.EmbeddingMapper, \ com.tencent.supersonic.headless.chat.mapper.KeywordMapper, \ com.tencent.supersonic.headless.chat.mapper.QueryFilterMapper, \ + com.tencent.supersonic.headless.chat.mapper.TimeFieldMapper,\ com.tencent.supersonic.headless.chat.mapper.TermDescMapper com.tencent.supersonic.headless.chat.parser.SemanticParser=\ @@ -27,9 +28,9 @@ com.tencent.supersonic.headless.chat.parser.llm.DataSetResolver=\ com.tencent.supersonic.headless.core.translator.converter.QueryConverter=\ com.tencent.supersonic.headless.core.translator.converter.DefaultDimValueConverter,\ com.tencent.supersonic.headless.core.translator.converter.SqlVariableConverter,\ - com.tencent.supersonic.headless.core.translator.converter.MetricRatioConverter,\ com.tencent.supersonic.headless.core.translator.converter.SqlQueryConverter,\ - com.tencent.supersonic.headless.core.translator.converter.StructQueryConverter + com.tencent.supersonic.headless.core.translator.converter.StructQueryConverter,\ + com.tencent.supersonic.headless.core.translator.converter.MetricRatioConverter com.tencent.supersonic.headless.core.translator.optimizer.QueryOptimizer=\ com.tencent.supersonic.headless.core.translator.optimizer.DetailQueryOptimizer,\ diff --git a/launchers/standalone/src/main/resources/META-INF/spring.factories b/launchers/standalone/src/main/resources/META-INF/spring.factories index 40943382a..d90db9e39 100644 --- a/launchers/standalone/src/main/resources/META-INF/spring.factories +++ b/launchers/standalone/src/main/resources/META-INF/spring.factories @@ -4,6 +4,7 @@ com.tencent.supersonic.headless.chat.mapper.SchemaMapper=\ com.tencent.supersonic.headless.chat.mapper.EmbeddingMapper, \ com.tencent.supersonic.headless.chat.mapper.KeywordMapper, \ com.tencent.supersonic.headless.chat.mapper.QueryFilterMapper, \ + com.tencent.supersonic.headless.chat.mapper.TimeFieldMapper,\ com.tencent.supersonic.headless.chat.mapper.TermDescMapper com.tencent.supersonic.headless.chat.parser.SemanticParser=\ @@ -27,9 +28,9 @@ com.tencent.supersonic.headless.chat.parser.llm.DataSetResolver=\ com.tencent.supersonic.headless.core.translator.converter.QueryConverter=\ com.tencent.supersonic.headless.core.translator.converter.DefaultDimValueConverter,\ com.tencent.supersonic.headless.core.translator.converter.SqlVariableConverter,\ - com.tencent.supersonic.headless.core.translator.converter.MetricRatioConverter,\ com.tencent.supersonic.headless.core.translator.converter.SqlQueryConverter,\ - com.tencent.supersonic.headless.core.translator.converter.StructQueryConverter + com.tencent.supersonic.headless.core.translator.converter.StructQueryConverter,\ + com.tencent.supersonic.headless.core.translator.converter.MetricRatioConverter com.tencent.supersonic.headless.core.translator.optimizer.QueryOptimizer=\ com.tencent.supersonic.headless.core.translator.optimizer.DetailQueryOptimizer,\