mirror of
https://github.com/tencentmusic/supersonic.git
synced 2025-12-20 06:34:55 +00:00
(improvement)(headless) transfer term nature modelId to viewId before providing it to chat and put the modelId of metadata into the dict word instead of viewId (#739)
Co-authored-by: jolunoluo
This commit is contained in:
@@ -38,11 +38,11 @@ public class DimensionRecommendProcessor implements ExecuteResultProcessor {
|
||||
queryResult.setRecommendedDimensions(dimensionRecommended);
|
||||
}
|
||||
|
||||
private List<SchemaElement> getDimensions(Long metricId, Long modelId) {
|
||||
private List<SchemaElement> getDimensions(Long metricId, Long viewId) {
|
||||
SemanticService semanticService = ContextUtils.getBean(SemanticService.class);
|
||||
ViewSchema modelSchema = semanticService.getModelSchema(modelId);
|
||||
ViewSchema viewSchema = semanticService.getViewSchema(viewId);
|
||||
List<Long> drillDownDimensions = Lists.newArrayList();
|
||||
Set<SchemaElement> metricElements = modelSchema.getMetrics();
|
||||
Set<SchemaElement> metricElements = viewSchema.getMetrics();
|
||||
if (!CollectionUtils.isEmpty(metricElements)) {
|
||||
Optional<SchemaElement> metric = metricElements.stream().filter(schemaElement ->
|
||||
metricId.equals(schemaElement.getId())
|
||||
@@ -54,7 +54,7 @@ public class DimensionRecommendProcessor implements ExecuteResultProcessor {
|
||||
}
|
||||
}
|
||||
final List<Long> drillDownDimensionsFinal = drillDownDimensions;
|
||||
return modelSchema.getDimensions().stream()
|
||||
return viewSchema.getDimensions().stream()
|
||||
.filter(dim -> filterDimension(drillDownDimensionsFinal, dim))
|
||||
.sorted(Comparator.comparing(SchemaElement::getUseCnt).reversed())
|
||||
.limit(recommend_dimension_size)
|
||||
|
||||
@@ -50,7 +50,7 @@ public class SemanticService {
|
||||
return schemaService.getSemanticSchema();
|
||||
}
|
||||
|
||||
public ViewSchema getModelSchema(Long id) {
|
||||
public ViewSchema getViewSchema(Long id) {
|
||||
return schemaService.getViewSchema(id);
|
||||
}
|
||||
|
||||
|
||||
@@ -219,7 +219,7 @@ public class ConfigServiceImpl implements ConfigService {
|
||||
}
|
||||
BeanUtils.copyProperties(chatConfigResp, chatConfigRich);
|
||||
|
||||
ViewSchema viewSchema = semanticService.getModelSchema(modelId);
|
||||
ViewSchema viewSchema = semanticService.getViewSchema(modelId);
|
||||
if (viewSchema == null) {
|
||||
return chatConfigRich;
|
||||
}
|
||||
|
||||
@@ -48,7 +48,7 @@ public class RecommendServiceImpl implements RecommendService {
|
||||
if (Objects.isNull(modelId)) {
|
||||
return new RecommendResp();
|
||||
}
|
||||
ViewSchema modelSchema = semanticService.getModelSchema(modelId);
|
||||
ViewSchema modelSchema = semanticService.getViewSchema(modelId);
|
||||
if (Objects.isNull(modelSchema)) {
|
||||
return new RecommendResp();
|
||||
}
|
||||
|
||||
@@ -1,17 +1,19 @@
|
||||
package com.tencent.supersonic.chat.server.service.impl;
|
||||
|
||||
import com.tencent.supersonic.headless.api.pojo.SchemaElement;
|
||||
import com.tencent.supersonic.chat.api.pojo.SemanticSchema;
|
||||
import com.tencent.supersonic.headless.core.knowledge.DictWord;
|
||||
import com.tencent.supersonic.headless.core.knowledge.builder.WordBuilderFactory;
|
||||
import com.tencent.supersonic.chat.core.query.semantic.SemanticInterpreter;
|
||||
import com.tencent.supersonic.chat.core.utils.ComponentFactory;
|
||||
import com.tencent.supersonic.common.pojo.enums.DictWordType;
|
||||
import com.tencent.supersonic.headless.api.pojo.SchemaElement;
|
||||
import com.tencent.supersonic.headless.core.knowledge.DictWord;
|
||||
import com.tencent.supersonic.headless.core.knowledge.builder.WordBuilderFactory;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
|
||||
@Service
|
||||
@@ -28,7 +30,6 @@ public class WordService {
|
||||
|
||||
addWordsByType(DictWordType.DIMENSION, semanticSchema.getDimensions(), words);
|
||||
addWordsByType(DictWordType.METRIC, semanticSchema.getMetrics(), words);
|
||||
addWordsByType(DictWordType.VIEW, semanticSchema.getViews(), words);
|
||||
addWordsByType(DictWordType.ENTITY, semanticSchema.getEntities(), words);
|
||||
addWordsByType(DictWordType.VALUE, semanticSchema.getDimensionValues(), words);
|
||||
|
||||
@@ -36,6 +37,7 @@ public class WordService {
|
||||
}
|
||||
|
||||
private void addWordsByType(DictWordType value, List<SchemaElement> metas, List<DictWord> natures) {
|
||||
metas = distinct(metas);
|
||||
List<DictWord> natureList = WordBuilderFactory.get(value).getDictWords(metas);
|
||||
log.debug("nature type:{} , nature size:{}", value.name(), natureList.size());
|
||||
natures.addAll(natureList);
|
||||
@@ -48,4 +50,13 @@ public class WordService {
|
||||
public void setPreDictWords(List<DictWord> preDictWords) {
|
||||
this.preDictWords = preDictWords;
|
||||
}
|
||||
|
||||
private List<SchemaElement> distinct(List<SchemaElement> metas) {
|
||||
return metas.stream()
|
||||
.collect(Collectors.toMap(SchemaElement::getId, Function.identity(), (e1, e2) -> e1))
|
||||
.values()
|
||||
.stream()
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user