mirror of
https://github.com/tencentmusic/supersonic.git
synced 2025-12-11 12:07:42 +00:00
[improvement][project] supersonic 0.7.0 version backend update (#24)
* [improvement][project] supersonic 0.7.0 version backend update * [improvement][project] supersonic 0.7.0 version backend update * [improvement][project] supersonic 0.7.0 version readme update --------- Co-authored-by: jolunoluo <jolunoluo@tencent.com>
This commit is contained in:
@@ -3,12 +3,14 @@ package com.tencent.supersonic.knowledge.dictionary.builder;
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
import com.tencent.supersonic.chat.api.pojo.SchemaElement;
|
||||
import com.tencent.supersonic.knowledge.dictionary.DictWord;
|
||||
import com.tencent.supersonic.knowledge.dictionary.DictWordType;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
/**
|
||||
* dimension value wordNature
|
||||
@@ -20,13 +22,23 @@ public class EntityWordBuilder extends BaseWordBuilder {
|
||||
@Override
|
||||
public List<DictWord> doGet(String word, SchemaElement schemaElement) {
|
||||
List<DictWord> result = Lists.newArrayList();
|
||||
DictWord dictWord = new DictWord();
|
||||
dictWord.setWord(word);
|
||||
|
||||
if (Objects.isNull(schemaElement)) {
|
||||
return result;
|
||||
}
|
||||
|
||||
Long domain = schemaElement.getDomain();
|
||||
String nature = DictWordType.NATURE_SPILT + domain + DictWordType.NATURE_SPILT + schemaElement.getId()
|
||||
+ DictWordType.ENTITY.getType();
|
||||
dictWord.setNatureWithFrequency(String.format("%s " + DEFAULT_FREQUENCY * 2, nature));
|
||||
result.add(dictWord);
|
||||
|
||||
if (!CollectionUtils.isEmpty(schemaElement.getAlias())) {
|
||||
schemaElement.getAlias().stream().forEach(alias -> {
|
||||
DictWord dictWordAlias = new DictWord();
|
||||
dictWordAlias.setWord(alias);
|
||||
dictWordAlias.setNatureWithFrequency(String.format("%s " + DEFAULT_FREQUENCY * 2, nature));
|
||||
result.add(dictWordAlias);
|
||||
});
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@@ -4,19 +4,13 @@ import com.google.common.cache.Cache;
|
||||
import com.google.common.cache.CacheBuilder;
|
||||
import com.tencent.supersonic.chat.api.component.SemanticLayer;
|
||||
import com.tencent.supersonic.chat.api.pojo.DomainSchema;
|
||||
import com.tencent.supersonic.common.pojo.Aggregator;
|
||||
import com.tencent.supersonic.common.pojo.Order;
|
||||
import com.tencent.supersonic.common.pojo.ResultData;
|
||||
import com.tencent.supersonic.semantic.api.model.response.DomainSchemaResp;
|
||||
import com.tencent.supersonic.semantic.api.model.response.QueryResultWithSchemaResp;
|
||||
import com.tencent.supersonic.semantic.api.query.request.QueryStructReq;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.stream.Collectors;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.core.ParameterizedTypeReference;
|
||||
@@ -76,31 +70,5 @@ public abstract class BaseSemanticLayer implements SemanticLayer {
|
||||
return domainSchemaList;
|
||||
}
|
||||
|
||||
protected void deletionDuplicated(QueryStructReq queryStructReq) {
|
||||
if (!CollectionUtils.isEmpty(queryStructReq.getGroups()) && queryStructReq.getGroups().size() > 1) {
|
||||
Set<String> groups = new HashSet<>();
|
||||
groups.addAll(queryStructReq.getGroups());
|
||||
queryStructReq.getGroups().clear();
|
||||
queryStructReq.getGroups().addAll(groups);
|
||||
}
|
||||
}
|
||||
|
||||
protected void onlyQueryFirstMetric(QueryStructReq queryStructReq) {
|
||||
if (!CollectionUtils.isEmpty(queryStructReq.getAggregators()) && queryStructReq.getAggregators().size() > 1) {
|
||||
log.info("multi metric in aggregators:{} , only query first one", queryStructReq.getAggregators());
|
||||
List<Aggregator> aggregators = queryStructReq.getAggregators().subList(0, 1);
|
||||
List<String> excludeAggregators = queryStructReq.getAggregators().stream().map(a -> a.getColumn())
|
||||
.filter(a -> !a.equals(aggregators.get(0).getColumn())).collect(
|
||||
Collectors.toList());
|
||||
queryStructReq.setAggregators(aggregators);
|
||||
List<Order> orders = queryStructReq.getOrders().stream()
|
||||
.filter(o -> !excludeAggregators.contains(o.getColumn())).collect(
|
||||
Collectors.toList());
|
||||
log.info("multi metric in orders:{} ", queryStructReq.getOrders());
|
||||
queryStructReq.setOrders(orders);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
protected abstract List<DomainSchemaResp> doFetchDomainSchema(List<Long> ids);
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import com.tencent.supersonic.chat.api.pojo.DomainSchema;
|
||||
import com.tencent.supersonic.chat.api.pojo.SchemaElement;
|
||||
import com.tencent.supersonic.chat.api.pojo.SchemaElementType;
|
||||
import com.tencent.supersonic.semantic.api.model.pojo.DimValueMap;
|
||||
import com.tencent.supersonic.semantic.api.model.pojo.Entity;
|
||||
import com.tencent.supersonic.semantic.api.model.response.DimSchemaResp;
|
||||
import com.tencent.supersonic.semantic.api.model.response.DomainSchemaResp;
|
||||
import com.tencent.supersonic.semantic.api.model.response.MetricSchemaResp;
|
||||
@@ -13,6 +14,7 @@ import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class DomainSchemaBuilder {
|
||||
|
||||
@@ -100,18 +102,21 @@ public class DomainSchemaBuilder {
|
||||
domainSchema.getDimensions().addAll(dimensions);
|
||||
domainSchema.getDimensionValues().addAll(dimensionValues);
|
||||
|
||||
if (!CollectionUtils.isEmpty(resp.getEntityNames())) {
|
||||
Set<SchemaElement> entities = new HashSet<>();
|
||||
for (String entity : resp.getEntityNames()) {
|
||||
entities.add(SchemaElement.builder()
|
||||
.domain(resp.getId())
|
||||
.id(resp.getId())
|
||||
.name(entity)
|
||||
.bizName(entity)
|
||||
.type(SchemaElementType.ENTITY)
|
||||
.build());
|
||||
|
||||
Entity entity = resp.getEntity();
|
||||
if (Objects.nonNull(entity)) {
|
||||
SchemaElement entityElement = new SchemaElement();
|
||||
|
||||
if (!CollectionUtils.isEmpty(entity.getNames()) && Objects.nonNull(entity.getEntityId())) {
|
||||
Map<Long, SchemaElement> idAndDimPair = dimensions.stream()
|
||||
.collect(Collectors.toMap(SchemaElement::getId, schemaElement -> schemaElement,(k1,k2)->k2));
|
||||
if (idAndDimPair.containsKey(entity.getEntityId())) {
|
||||
entityElement = idAndDimPair.get(entity.getEntityId());
|
||||
entityElement.setType(SchemaElementType.ENTITY);
|
||||
}
|
||||
entityElement.setAlias(entity.getNames());
|
||||
domainSchema.setEntity(entityElement);
|
||||
}
|
||||
domainSchema.getEntities().addAll(entities);
|
||||
}
|
||||
|
||||
return domainSchema;
|
||||
|
||||
@@ -36,8 +36,6 @@ public class LocalSemanticLayer extends BaseSemanticLayer {
|
||||
|
||||
@Override
|
||||
public QueryResultWithSchemaResp queryByStruct(QueryStructReq queryStructReq, User user) {
|
||||
deletionDuplicated(queryStructReq);
|
||||
onlyQueryFirstMetric(queryStructReq);
|
||||
try {
|
||||
QueryService queryService = ContextUtils.getBean(QueryService.class);
|
||||
QueryResultWithSchemaResp queryResultWithSchemaResp = queryService.queryByStruct(queryStructReq, user);
|
||||
@@ -50,10 +48,6 @@ public class LocalSemanticLayer extends BaseSemanticLayer {
|
||||
|
||||
@Override
|
||||
public QueryResultWithSchemaResp queryByMultiStruct(QueryMultiStructReq queryMultiStructReq, User user) {
|
||||
for (QueryStructReq queryStructReq : queryMultiStructReq.getQueryStructReqs()) {
|
||||
deletionDuplicated(queryStructReq);
|
||||
onlyQueryFirstMetric(queryStructReq);
|
||||
}
|
||||
try {
|
||||
QueryService queryService = ContextUtils.getBean(QueryService.class);
|
||||
return queryService.queryByMultiStruct(queryMultiStructReq, user);
|
||||
|
||||
@@ -58,8 +58,6 @@ public class RemoteSemanticLayer extends BaseSemanticLayer {
|
||||
|
||||
@Override
|
||||
public QueryResultWithSchemaResp queryByStruct(QueryStructReq queryStructReq, User user) {
|
||||
deletionDuplicated(queryStructReq);
|
||||
onlyQueryFirstMetric(queryStructReq);
|
||||
DefaultSemanticConfig defaultSemanticConfig = ContextUtils.getBean(DefaultSemanticConfig.class);
|
||||
return searchByRestTemplate(
|
||||
defaultSemanticConfig.getSemanticUrl() + defaultSemanticConfig.getSearchByStructPath(),
|
||||
@@ -68,10 +66,6 @@ public class RemoteSemanticLayer extends BaseSemanticLayer {
|
||||
|
||||
@Override
|
||||
public QueryResultWithSchemaResp queryByMultiStruct(QueryMultiStructReq queryMultiStructReq, User user) {
|
||||
for (QueryStructReq queryStructReq : queryMultiStructReq.getQueryStructReqs()) {
|
||||
deletionDuplicated(queryStructReq);
|
||||
onlyQueryFirstMetric(queryStructReq);
|
||||
}
|
||||
DefaultSemanticConfig defaultSemanticConfig = ContextUtils.getBean(DefaultSemanticConfig.class);
|
||||
return searchByRestTemplate(
|
||||
defaultSemanticConfig.getSemanticUrl() + defaultSemanticConfig.getSearchByMultiStructPath(),
|
||||
|
||||
Reference in New Issue
Block a user