diff --git a/common/src/main/java/com/tencent/supersonic/common/pojo/enums/DictWordType.java b/common/src/main/java/com/tencent/supersonic/common/pojo/enums/DictWordType.java index f8e4703f4..7d1074d4e 100644 --- a/common/src/main/java/com/tencent/supersonic/common/pojo/enums/DictWordType.java +++ b/common/src/main/java/com/tencent/supersonic/common/pojo/enums/DictWordType.java @@ -1,7 +1,7 @@ package com.tencent.supersonic.common.pojo.enums; -import java.util.Objects; import org.apache.commons.lang3.StringUtils; +import java.util.Objects; /*** * nature type @@ -23,6 +23,8 @@ public enum DictWordType { TAG("tag"), + TERM("term"), + SUFFIX("suffix"); public static final String NATURE_SPILT = "_"; diff --git a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/DataSetSchema.java b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/DataSetSchema.java index c161c52e8..d4e8a8e23 100644 --- a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/DataSetSchema.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/DataSetSchema.java @@ -1,9 +1,9 @@ package com.tencent.supersonic.headless.api.pojo; +import lombok.Data; import java.util.HashSet; import java.util.Optional; import java.util.Set; -import lombok.Data; @Data public class DataSetSchema { @@ -12,6 +12,7 @@ public class DataSetSchema { private Set dimensions = new HashSet<>(); private Set tags = new HashSet<>(); private Set dimensionValues = new HashSet<>(); + private Set terms = new HashSet<>(); private SchemaElement entity = new SchemaElement(); private QueryConfig queryConfig; @@ -37,6 +38,9 @@ public class DataSetSchema { case TAG: element = tags.stream().filter(e -> e.getId() == elementID).findFirst(); break; + case TERM: + element = terms.stream().filter(e -> e.getId() == elementID).findFirst(); + break; default: } diff --git a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/SchemaElementType.java b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/SchemaElementType.java index ee316eeb1..1c08c8949 100644 --- a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/SchemaElementType.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/SchemaElementType.java @@ -8,5 +8,6 @@ public enum SchemaElementType { ENTITY, ID, DATE, - TAG + TAG, + TERM } diff --git a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/SemanticSchema.java b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/SemanticSchema.java index 78a066530..6f3eb77df 100644 --- a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/SemanticSchema.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/SemanticSchema.java @@ -44,6 +44,9 @@ public class SemanticSchema implements Serializable { case TAG: element = getElementsById(elementID, getTags()); break; + case TERM: + element = getElementsById(elementID, getTerms()); + break; default: } @@ -118,6 +121,12 @@ public class SemanticSchema implements Serializable { return tags; } + public List getTerms() { + List terms = new ArrayList<>(); + dataSetSchemaList.stream().forEach(d -> terms.addAll(d.getTerms())); + return terms; + } + private List getElementsByDataSetId(Long dataSetId, List elements) { return elements.stream() .filter(schemaElement -> dataSetId.equals(schemaElement.getDataSet())) diff --git a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/Term.java b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/Term.java deleted file mode 100644 index 959faccf0..000000000 --- a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/Term.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.tencent.supersonic.headless.api.pojo; - -import com.google.common.collect.Lists; -import lombok.Data; -import java.util.List; - -@Data -public class Term { - - private String name; - - private String description; - - private List similarTerms = Lists.newArrayList(); - -} diff --git a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/request/TermSetReq.java b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/request/TermReq.java similarity index 65% rename from headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/request/TermSetReq.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/request/TermReq.java index 444012a7a..bd73ff70e 100644 --- a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/request/TermSetReq.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/request/TermReq.java @@ -2,18 +2,23 @@ package com.tencent.supersonic.headless.api.pojo.request; import com.google.common.collect.Lists; import com.tencent.supersonic.common.pojo.RecordInfo; -import com.tencent.supersonic.headless.api.pojo.Term; import lombok.Data; import javax.validation.constraints.NotNull; import java.util.List; @Data -public class TermSetReq extends RecordInfo { +public class TermReq extends RecordInfo { + + private Long id; @NotNull(message = "主题域ID不可为空") private Long domainId; - private List terms = Lists.newArrayList(); + private String name; + + private String description; + + private List alias = Lists.newArrayList(); } diff --git a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/response/DataSetSchemaResp.java b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/response/DataSetSchemaResp.java index 908e0e63d..532b8e181 100644 --- a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/response/DataSetSchemaResp.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/response/DataSetSchemaResp.java @@ -16,6 +16,7 @@ public class DataSetSchemaResp extends DataSetResp { private List metrics = Lists.newArrayList(); private List dimensions = Lists.newArrayList(); private List modelResps = Lists.newArrayList(); + private List termResps = Lists.newArrayList(); public DimSchemaResp getPrimaryKey() { for (ModelResp modelResp : modelResps) { diff --git a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/response/MapInfoResp.java b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/response/MapInfoResp.java index ccc7cebac..0ded888ab 100644 --- a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/response/MapInfoResp.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/response/MapInfoResp.java @@ -1,6 +1,6 @@ package com.tencent.supersonic.headless.api.pojo.response; -import com.tencent.supersonic.headless.api.pojo.Term; +import com.tencent.supersonic.headless.api.pojo.SchemaElementMatch; import lombok.Data; import java.util.HashMap; @@ -14,6 +14,6 @@ public class MapInfoResp { private Map dataSetMapInfo = new HashMap<>(); - private Map> terms = new HashMap<>(); + private Map> terms = new HashMap<>(); } diff --git a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/response/TermSetResp.java b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/response/TermResp.java similarity index 55% rename from headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/response/TermSetResp.java rename to headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/response/TermResp.java index d823bb3f7..ba34deb9a 100644 --- a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/response/TermSetResp.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/response/TermResp.java @@ -2,23 +2,27 @@ package com.tencent.supersonic.headless.api.pojo.response; import com.google.common.collect.Lists; import com.tencent.supersonic.common.pojo.RecordInfo; -import com.tencent.supersonic.headless.api.pojo.Term; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import javax.validation.constraints.NotNull; import java.util.List; @Data @AllArgsConstructor @NoArgsConstructor -public class TermSetResp extends RecordInfo { +public class TermResp extends RecordInfo { + private Long id; + + @NotNull(message = "主题域ID不可为空") private Long domainId; - private List terms = Lists.newArrayList(); + private String name; + + private String description; + + private List alias = Lists.newArrayList(); - public TermSetResp(Long domainId) { - this.domainId = domainId; - } } diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/chat/knowledge/builder/TermWordBuilder.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/chat/knowledge/builder/TermWordBuilder.java new file mode 100644 index 000000000..45983b6f2 --- /dev/null +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/chat/knowledge/builder/TermWordBuilder.java @@ -0,0 +1,44 @@ +package com.tencent.supersonic.headless.core.chat.knowledge.builder; + +import com.google.common.collect.Lists; +import com.tencent.supersonic.common.pojo.enums.DictWordType; +import com.tencent.supersonic.headless.api.pojo.SchemaElement; +import com.tencent.supersonic.headless.core.chat.knowledge.DictWord; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * Metric DictWord + */ +@Service +public class TermWordBuilder extends BaseWordWithAliasBuilder { + + @Override + public List doGet(String word, SchemaElement schemaElement) { + List result = Lists.newArrayList(); + result.add(getOneWordNature(word, schemaElement, false)); + result.addAll(getOneWordNatureAlias(schemaElement, false)); + String reverseWord = StringUtils.reverse(word); + if (!word.equalsIgnoreCase(reverseWord)) { + result.add(getOneWordNature(reverseWord, schemaElement, true)); + } + return result; + } + + public DictWord getOneWordNature(String word, SchemaElement schemaElement, boolean isSuffix) { + DictWord dictWord = new DictWord(); + dictWord.setWord(word); + Long dataSet = schemaElement.getDataSet(); + String nature = DictWordType.NATURE_SPILT + dataSet + DictWordType.NATURE_SPILT + schemaElement.getId() + + DictWordType.TERM.getType(); + if (isSuffix) { + nature = DictWordType.NATURE_SPILT + dataSet + DictWordType.NATURE_SPILT + schemaElement.getId() + + DictWordType.SUFFIX.getType() + DictWordType.TERM.getType(); + } + dictWord.setNatureWithFrequency(String.format("%s " + DEFAULT_FREQUENCY, nature)); + return dictWord; + } + +} diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/chat/knowledge/builder/WordBuilderFactory.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/chat/knowledge/builder/WordBuilderFactory.java index 4036ca576..62fee712d 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/chat/knowledge/builder/WordBuilderFactory.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/chat/knowledge/builder/WordBuilderFactory.java @@ -18,6 +18,7 @@ public class WordBuilderFactory { wordNatures.put(DictWordType.DATASET, new ModelWordBuilder()); wordNatures.put(DictWordType.ENTITY, new EntityWordBuilder()); wordNatures.put(DictWordType.VALUE, new ValueWordBuilder()); + wordNatures.put(DictWordType.TERM, new TermWordBuilder()); } public static BaseWordBuilder get(DictWordType strategyType) { diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/chat/knowledge/helper/HanlpHelper.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/chat/knowledge/helper/HanlpHelper.java index 6be044cca..7a5dd0a61 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/chat/knowledge/helper/HanlpHelper.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/chat/knowledge/helper/HanlpHelper.java @@ -214,17 +214,17 @@ public class HanlpHelper { } } - public static List getTerms(String text, Map> modelIdToViewIds) { + public static List getTerms(String text, Map> modelIdToDataSetIds) { return getSegment().seg(text.toLowerCase()).stream() .filter(term -> term.getNature().startsWith(DictWordType.NATURE_SPILT)) - .map(term -> transform2ApiTerm(term, modelIdToViewIds)) + .map(term -> transform2ApiTerm(term, modelIdToDataSetIds)) .flatMap(Collection::stream) .collect(Collectors.toList()); } - public static List transform2ApiTerm(Term term, Map> modelIdToViewIds) { + public static List transform2ApiTerm(Term term, Map> modelIdToDataSetIds) { List s2Terms = Lists.newArrayList(); - List natures = NatureHelper.changeModel2DataSet(String.valueOf(term.getNature()), modelIdToViewIds); + List natures = NatureHelper.changeModel2DataSet(String.valueOf(term.getNature()), modelIdToDataSetIds); for (String nature : natures) { S2Term s2Term = new S2Term(); BeanUtils.copyProperties(term, s2Term); diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/chat/knowledge/helper/NatureHelper.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/chat/knowledge/helper/NatureHelper.java index 4d11b47ea..169555d10 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/chat/knowledge/helper/NatureHelper.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/chat/knowledge/helper/NatureHelper.java @@ -6,6 +6,10 @@ import com.tencent.supersonic.common.pojo.enums.DictWordType; import com.tencent.supersonic.headless.api.pojo.SchemaElementType; import com.tencent.supersonic.headless.api.pojo.response.S2Term; import com.tencent.supersonic.headless.core.chat.knowledge.DataSetInfoStat; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.util.CollectionUtils; + import java.util.ArrayList; import java.util.Comparator; import java.util.HashMap; @@ -14,9 +18,6 @@ import java.util.Map; import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; -import org.springframework.util.CollectionUtils; /** * nature parse helper @@ -46,6 +47,9 @@ public class NatureHelper { case VALUE: result = SchemaElementType.VALUE; break; + case TERM: + result = SchemaElementType.TERM; + break; default: break; } @@ -108,6 +112,10 @@ public class NatureHelper { } public static List changeModel2DataSet(String nature, Map> modelIdToDataSetIds) { + //term prefix id is dataSetId, no need to transform + if (SchemaElementType.TERM.equals(NatureHelper.convertToElementType(nature))) { + return Lists.newArrayList(nature); + } Long modelId = getModelId(nature); List dataSetIds = modelIdToDataSetIds.get(modelId); if (CollectionUtils.isEmpty(dataSetIds)) { @@ -129,7 +137,7 @@ public class NatureHelper { return false; } return !nature.endsWith(DictWordType.METRIC.getType()) && !nature.endsWith( - DictWordType.DIMENSION.getType()) + DictWordType.DIMENSION.getType()) && !nature.endsWith(DictWordType.TERM.getType()) && StringUtils.isNumeric(split[1]); } diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/chat/mapper/BaseMapper.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/chat/mapper/BaseMapper.java index 99c53d3b4..9cf5662e0 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/chat/mapper/BaseMapper.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/chat/mapper/BaseMapper.java @@ -111,6 +111,10 @@ public abstract class BaseMapper implements SchemaMapper { if (!existElement.equals(newElement)) { return false; } + if (SchemaElementType.TERM.equals(existElement.getType()) + && SchemaElementType.TERM.equals(newElement.getType())) { + return false; + } if (SchemaElementType.VALUE.equals(newElement.getType())) { return existElementMatch.getWord().equalsIgnoreCase(newElementMatch.getWord()); } diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/chat/mapper/HanlpDictMatchStrategy.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/chat/mapper/HanlpDictMatchStrategy.java index cf4a44211..dab46c704 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/chat/mapper/HanlpDictMatchStrategy.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/chat/mapper/HanlpDictMatchStrategy.java @@ -46,7 +46,7 @@ public class HanlpDictMatchStrategy extends BaseMatchStrategy { return null; } - log.debug("retryCount:{},terms:{},,detectModelIds:{}", terms, detectDataSetIds); + log.debug("terms:{},detectModelIds:{}", terms, detectDataSetIds); List detects = detect(queryContext, terms, detectDataSetIds); Map> result = new HashMap<>(); diff --git a/headless/server/pom.xml b/headless/server/pom.xml index 973f4704c..420ae599e 100644 --- a/headless/server/pom.xml +++ b/headless/server/pom.xml @@ -118,13 +118,6 @@ postgresql ${postgresql.version} - - com.tencent.supersonic - headless-api - 0.9.0-SNAPSHOT - compile - - diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/persistence/dataobject/TermSetDO.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/persistence/dataobject/TermDO.java similarity index 79% rename from headless/server/src/main/java/com/tencent/supersonic/headless/server/persistence/dataobject/TermSetDO.java rename to headless/server/src/main/java/com/tencent/supersonic/headless/server/persistence/dataobject/TermDO.java index 334583ce5..7252fc7be 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/persistence/dataobject/TermSetDO.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/persistence/dataobject/TermDO.java @@ -4,18 +4,23 @@ import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; + import java.util.Date; @Data -@TableName("s2_term_set") -public class TermSetDO { +@TableName("s2_term") +public class TermDO { @TableId(value = "id", type = IdType.AUTO) private Long id; private Long domainId; - private String terms; + private String name; + + private String description; + + private String alias; private Date createdAt; diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/persistence/mapper/TermSetMapper.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/persistence/mapper/TermMapper.java similarity index 75% rename from headless/server/src/main/java/com/tencent/supersonic/headless/server/persistence/mapper/TermSetMapper.java rename to headless/server/src/main/java/com/tencent/supersonic/headless/server/persistence/mapper/TermMapper.java index 44ebbb8a4..f757a95f8 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/persistence/mapper/TermSetMapper.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/persistence/mapper/TermMapper.java @@ -1,11 +1,11 @@ package com.tencent.supersonic.headless.server.persistence.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.tencent.supersonic.headless.server.persistence.dataobject.TermSetDO; +import com.tencent.supersonic.headless.server.persistence.dataobject.TermDO; import org.apache.ibatis.annotations.Mapper; @Mapper -public interface TermSetMapper extends BaseMapper { +public interface TermMapper extends BaseMapper { } \ No newline at end of file diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/DomainController.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/DomainController.java index bb6b11be9..350c300cd 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/DomainController.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/DomainController.java @@ -32,21 +32,19 @@ public class DomainController { } @PostMapping("/createDomain") - public Boolean createDomain(@RequestBody DomainReq domainReq, + public DomainResp createDomain(@RequestBody DomainReq domainReq, HttpServletRequest request, HttpServletResponse response) { User user = UserHolder.findUser(request, response); - domainService.createDomain(domainReq, user); - return true; + return domainService.createDomain(domainReq, user); } @PostMapping("/updateDomain") - public Boolean updateDomain(@RequestBody DomainUpdateReq domainUpdateReq, + public DomainResp updateDomain(@RequestBody DomainUpdateReq domainUpdateReq, HttpServletRequest request, HttpServletResponse response) { User user = UserHolder.findUser(request, response); - domainService.updateDomain(domainUpdateReq, user); - return true; + return domainService.updateDomain(domainUpdateReq, user); } @DeleteMapping("/deleteDomain/{domainId}") diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/TermController.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/TermController.java index 93eed8d4b..2bd80a5cd 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/TermController.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/TermController.java @@ -2,11 +2,13 @@ package com.tencent.supersonic.headless.server.rest; import com.tencent.supersonic.auth.api.authentication.pojo.User; import com.tencent.supersonic.auth.api.authentication.utils.UserHolder; -import com.tencent.supersonic.headless.api.pojo.request.TermSetReq; -import com.tencent.supersonic.headless.api.pojo.response.TermSetResp; +import com.tencent.supersonic.headless.api.pojo.request.TermReq; +import com.tencent.supersonic.headless.api.pojo.response.TermResp; import com.tencent.supersonic.headless.server.service.TermService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -15,6 +17,7 @@ import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.util.List; @RestController @RequestMapping("/api/semantic/term") @@ -24,17 +27,23 @@ public class TermController { private TermService termService; @PostMapping("/saveOrUpdate") - public boolean saveOrUpdate(@RequestBody TermSetReq termSetReq, + public boolean saveOrUpdate(@RequestBody TermReq termReq, HttpServletRequest request, HttpServletResponse response) { User user = UserHolder.findUser(request, response); - termService.saveOrUpdate(termSetReq, user); + termService.saveOrUpdate(termReq, user); return true; } @GetMapping - public TermSetResp getTermSet(@RequestParam("domainId") Long domainId) { - return termService.getTermSet(domainId); + public List getTerms(@RequestParam("domainId") Long domainId) { + return termService.getTerms(domainId); + } + + @DeleteMapping("/{id}") + public boolean delete(@PathVariable("id") Long id) { + termService.delete(id); + return true; } } diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/DomainService.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/DomainService.java index 4d82b26aa..a87686df9 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/DomainService.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/DomainService.java @@ -16,9 +16,9 @@ public interface DomainService { Map getDomainFullPath(); - void createDomain(DomainReq domainReq, User user); + DomainResp createDomain(DomainReq domainReq, User user); - void updateDomain(DomainUpdateReq domainUpdateReq, User user); + DomainResp updateDomain(DomainUpdateReq domainUpdateReq, User user); void deleteDomain(Long id); diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/TermService.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/TermService.java index 064d035fe..5e97c219b 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/TermService.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/TermService.java @@ -2,9 +2,8 @@ package com.tencent.supersonic.headless.server.service; import com.tencent.supersonic.auth.api.authentication.pojo.User; -import com.tencent.supersonic.headless.api.pojo.Term; -import com.tencent.supersonic.headless.api.pojo.request.TermSetReq; -import com.tencent.supersonic.headless.api.pojo.response.TermSetResp; +import com.tencent.supersonic.headless.api.pojo.request.TermReq; +import com.tencent.supersonic.headless.api.pojo.response.TermResp; import java.util.List; import java.util.Map; @@ -12,10 +11,12 @@ import java.util.Set; public interface TermService { - void saveOrUpdate(TermSetReq termSetReq, User user); + void saveOrUpdate(TermReq termSetReq, User user); - TermSetResp getTermSet(Long domainId); + void delete(Long id); - Map> getTermSets(Set domainIds); + List getTerms(Long domainId); + + Map> getTermSets(Set domainIds); } diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/DomainServiceImpl.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/DomainServiceImpl.java index 3107ac1df..cfee9ef1f 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/DomainServiceImpl.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/DomainServiceImpl.java @@ -57,18 +57,20 @@ public class DomainServiceImpl implements DomainService { } @Override - public void createDomain(DomainReq domainReq, User user) { + public DomainResp createDomain(DomainReq domainReq, User user) { DomainDO domainDO = DomainConvert.convert(domainReq, user); domainDO.setStatus(StatusEnum.ONLINE.getCode()); domainRepository.createDomain(domainDO); + return DomainConvert.convert(domainDO); } @Override - public void updateDomain(DomainUpdateReq domainUpdateReq, User user) { + public DomainResp updateDomain(DomainUpdateReq domainUpdateReq, User user) { domainUpdateReq.updatedBy(user.getName()); DomainDO domainDO = getDomainDO(domainUpdateReq.getId()); BeanMapper.mapper(domainUpdateReq, domainDO); domainRepository.updateDomain(domainDO); + return DomainConvert.convert(domainDO); } @Override diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/MetaDiscoveryServiceImpl.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/MetaDiscoveryServiceImpl.java index 3af0ec3c2..44fa1f201 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/MetaDiscoveryServiceImpl.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/MetaDiscoveryServiceImpl.java @@ -8,7 +8,6 @@ import com.tencent.supersonic.headless.api.pojo.SchemaElementType; import com.tencent.supersonic.headless.api.pojo.SchemaItem; import com.tencent.supersonic.headless.api.pojo.SchemaMapInfo; import com.tencent.supersonic.headless.api.pojo.SemanticSchema; -import com.tencent.supersonic.headless.api.pojo.Term; import com.tencent.supersonic.headless.api.pojo.request.QueryMapReq; import com.tencent.supersonic.headless.api.pojo.request.QueryReq; import com.tencent.supersonic.headless.api.pojo.response.DataSetMapInfo; @@ -20,7 +19,6 @@ import com.tencent.supersonic.headless.server.pojo.MetaFilter; import com.tencent.supersonic.headless.server.service.ChatQueryService; import com.tencent.supersonic.headless.server.service.DataSetService; import com.tencent.supersonic.headless.server.service.MetaDiscoveryService; -import com.tencent.supersonic.headless.server.service.TermService; import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -48,9 +46,6 @@ public class MetaDiscoveryServiceImpl implements MetaDiscoveryService { @Autowired private SemanticService semanticService; - @Autowired - private TermService termService; - @Override public MapInfoResp getMapMeta(QueryMapReq queryMapReq) { @@ -77,7 +72,7 @@ public class MetaDiscoveryServiceImpl implements MetaDiscoveryService { Map dataSetMap = dataSetList.stream() .collect(Collectors.toMap(DataSetResp::getId, d -> d)); mapInfoResp.setDataSetMapInfo(getDataSetInfo(mapResp.getMapInfo(), dataSetMap, topN)); - mapInfoResp.setTerms(getTerms(dataSetList, dataSetMap)); + mapInfoResp.setTerms(getTerms(mapResp.getMapInfo(), dataSetMap)); return mapInfoResp; } @@ -109,7 +104,10 @@ public class MetaDiscoveryServiceImpl implements MetaDiscoveryService { Map dataSetMap) { Map> result = new HashMap<>(); for (Map.Entry> entry : mapInfo.getDataSetElementMatches().entrySet()) { - List values = entry.getValue(); + List values = entry.getValue().stream() + .filter(schemaElementMatch -> + !SchemaElementType.TERM.equals(schemaElementMatch.getElement().getType())) + .collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(values) && dataSetMap.containsKey(entry.getKey())) { result.put(entry.getKey(), values); } @@ -150,17 +148,21 @@ public class MetaDiscoveryServiceImpl implements MetaDiscoveryService { return result; } - private Map> getTerms(List dataSets, Map dataSetNameMap) { - Set domainIds = dataSets.stream().map(DataSetResp::getDomainId).collect(Collectors.toSet()); - Map dataSetDomainIdMap = dataSets.stream() - .collect(Collectors.toMap(DataSetResp::getId, DataSetResp::getDomainId)); - Map> domainTermSetMap = termService.getTermSets(domainIds); - Map> dataSetTermSetMap = new HashMap<>(); - for (DataSetResp dataSet : dataSets) { - dataSetTermSetMap.put(dataSetNameMap.get(dataSet.getId()).getName(), - domainTermSetMap.get(dataSetDomainIdMap.get(dataSet.getId()))); + private Map> getTerms(SchemaMapInfo mapInfo, + Map dataSetNameMap) { + Map> termMap = new HashMap<>(); + Map> dataSetElementMatches = mapInfo.getDataSetElementMatches(); + for (Map.Entry> entry : dataSetElementMatches.entrySet()) { + DataSetResp dataSetResp = dataSetNameMap.get(entry.getKey()); + if (dataSetResp == null) { + continue; + } + List terms = entry.getValue().stream().filter(schemaElementMatch + -> SchemaElementType.TERM.equals(schemaElementMatch.getElement().getType())) + .collect(Collectors.toList()); + termMap.put(dataSetResp.getName(), terms); } - return dataSetTermSetMap; + return termMap; } /*** diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/SchemaServiceImpl.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/SchemaServiceImpl.java index e86fe47ff..937bace3d 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/SchemaServiceImpl.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/SchemaServiceImpl.java @@ -33,6 +33,7 @@ import com.tencent.supersonic.headless.api.pojo.response.ModelResp; import com.tencent.supersonic.headless.api.pojo.response.ModelSchemaResp; import com.tencent.supersonic.headless.api.pojo.response.SemanticSchemaResp; import com.tencent.supersonic.headless.api.pojo.response.TagResp; +import com.tencent.supersonic.headless.api.pojo.response.TermResp; import com.tencent.supersonic.headless.server.pojo.MetaFilter; import com.tencent.supersonic.headless.server.pojo.ModelFilter; import com.tencent.supersonic.headless.server.pojo.TagFilter; @@ -44,6 +45,7 @@ import com.tencent.supersonic.headless.server.service.ModelRelaService; import com.tencent.supersonic.headless.server.service.ModelService; import com.tencent.supersonic.headless.server.service.SchemaService; import com.tencent.supersonic.headless.server.service.TagMetaService; +import com.tencent.supersonic.headless.server.service.TermService; import com.tencent.supersonic.headless.server.utils.DataSetSchemaBuilder; import com.tencent.supersonic.headless.server.utils.DimensionConverter; import com.tencent.supersonic.headless.server.utils.MetricConverter; @@ -60,6 +62,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; +import java.util.Set; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @@ -86,6 +89,7 @@ public class SchemaServiceImpl implements SchemaService { private final DataSetService dataSetService; private final ModelRelaService modelRelaService; private final TagMetaService tagService; + private final TermService termService; public SchemaServiceImpl(ModelService modelService, DimensionService dimensionService, @@ -93,7 +97,7 @@ public class SchemaServiceImpl implements SchemaService { DomainService domainService, DataSetService dataSetService, ModelRelaService modelRelaService, - StatUtils statUtils, TagMetaService tagService) { + StatUtils statUtils, TagMetaService tagService, TermService termService) { this.modelService = modelService; this.dimensionService = dimensionService; this.metricService = metricService; @@ -102,6 +106,7 @@ public class SchemaServiceImpl implements SchemaService { this.modelRelaService = modelRelaService; this.statUtils = statUtils; this.tagService = tagService; + this.termService = termService; } @SneakyThrows @@ -165,9 +170,12 @@ public class SchemaServiceImpl implements SchemaService { metaFilter.setIds(filter.getDataSetIds()); List dataSetResps = dataSetService.getDataSetList(metaFilter); Map dataSetRespMap = getDataSetMap(dataSetResps); - + Set domainIds = dataSetResps.stream().map(DataSetResp::getDomainId) + .collect(Collectors.toSet()); List modelIds = dataSetRespMap.values().stream().map(DataSetResp::getAllModels) .flatMap(Collection::stream).collect(Collectors.toList()); + Map> termMaps = termService.getTermSets(domainIds); + metaFilter.setModelIds(modelIds); metaFilter.setIds(Lists.newArrayList()); @@ -198,7 +206,7 @@ public class SchemaServiceImpl implements SchemaService { dataSetSchemaResp.setMetrics(metricSchemaResps); dataSetSchemaResp.setModelResps(modelResps.stream().filter(modelResp -> dataSetResp.getAllModels().contains(modelResp.getId())).collect(Collectors.toList())); - + dataSetSchemaResp.setTermResps(termMaps.getOrDefault(dataSetResp.getDomainId(), Lists.newArrayList())); dataSetSchemaResps.add(dataSetSchemaResp); } fillStaticInfo(dataSetSchemaResps); diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/TermServiceImpl.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/TermServiceImpl.java index 1c9ff96bb..654d3d49e 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/TermServiceImpl.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/TermServiceImpl.java @@ -5,11 +5,10 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.tencent.supersonic.auth.api.authentication.pojo.User; import com.tencent.supersonic.common.util.BeanMapper; import com.tencent.supersonic.common.util.JsonUtil; -import com.tencent.supersonic.headless.api.pojo.Term; -import com.tencent.supersonic.headless.api.pojo.request.TermSetReq; -import com.tencent.supersonic.headless.api.pojo.response.TermSetResp; -import com.tencent.supersonic.headless.server.persistence.dataobject.TermSetDO; -import com.tencent.supersonic.headless.server.persistence.mapper.TermSetMapper; +import com.tencent.supersonic.headless.api.pojo.request.TermReq; +import com.tencent.supersonic.headless.api.pojo.response.TermResp; +import com.tencent.supersonic.headless.server.persistence.dataobject.TermDO; +import com.tencent.supersonic.headless.server.persistence.mapper.TermMapper; import com.tencent.supersonic.headless.server.service.TermService; import org.springframework.stereotype.Service; import java.util.List; @@ -19,48 +18,49 @@ import java.util.stream.Collectors; @Service -public class TermServiceImpl extends ServiceImpl implements TermService { +public class TermServiceImpl extends ServiceImpl implements TermService { @Override - public void saveOrUpdate(TermSetReq termSetReq, User user) { - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.lambda().eq(TermSetDO::getDomainId, termSetReq.getDomainId()); - TermSetDO termSetDO = getOne(queryWrapper); + public void saveOrUpdate(TermReq termSetReq, User user) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda().eq(TermDO::getId, termSetReq.getId()); + TermDO termSetDO = getOne(queryWrapper); if (termSetDO == null) { termSetReq.createdBy(user.getName()); - termSetDO = new TermSetDO(); + termSetDO = new TermDO(); } termSetReq.updatedBy(user.getName()); BeanMapper.mapper(termSetReq, termSetDO); - termSetDO.setTerms(JsonUtil.toString(termSetReq.getTerms())); + termSetDO.setAlias(JsonUtil.toString(termSetReq.getAlias())); saveOrUpdate(termSetDO); } @Override - public TermSetResp getTermSet(Long domainId) { - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.lambda().eq(TermSetDO::getDomainId, domainId); - TermSetDO termSetDO = getOne(queryWrapper); - TermSetResp termSetResp = new TermSetResp(domainId); - if (termSetDO == null) { - return termSetResp; - } - return convert(termSetDO); + public void delete(Long id) { + removeById(id); } @Override - public Map> getTermSets(Set domainIds) { - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.lambda().in(TermSetDO::getDomainId, domainIds); - List list = list(queryWrapper); - return list.stream().map(this::convert).collect( - Collectors.toMap(TermSetResp::getDomainId, TermSetResp::getTerms, (k1, k2) -> k1)); + public List getTerms(Long domainId) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda().eq(TermDO::getDomainId, domainId); + List termDOS = list(queryWrapper); + return termDOS.stream().map(this::convert).collect(Collectors.toList()); } - private TermSetResp convert(TermSetDO termSetDO) { - TermSetResp termSetResp = new TermSetResp(); + @Override + public Map> getTermSets(Set domainIds) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda().in(TermDO::getDomainId, domainIds); + List list = list(queryWrapper); + return list.stream().map(this::convert).collect( + Collectors.groupingBy(TermResp::getDomainId)); + } + + private TermResp convert(TermDO termSetDO) { + TermResp termSetResp = new TermResp(); BeanMapper.mapper(termSetDO, termSetResp); - termSetResp.setTerms(JsonUtil.toList(termSetDO.getTerms(), Term.class)); + termSetResp.setAlias(JsonUtil.toList(termSetDO.getAlias(), String.class)); return termSetResp; } diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/WordService.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/WordService.java index e21d2c16c..73ec3594f 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/WordService.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/WordService.java @@ -2,6 +2,7 @@ package com.tencent.supersonic.headless.server.service.impl; import com.tencent.supersonic.common.pojo.enums.DictWordType; import com.tencent.supersonic.headless.api.pojo.SchemaElement; +import com.tencent.supersonic.headless.api.pojo.SchemaElementType; import com.tencent.supersonic.headless.api.pojo.SemanticSchema; import com.tencent.supersonic.headless.core.chat.knowledge.DictWord; import com.tencent.supersonic.headless.core.chat.knowledge.builder.WordBuilderFactory; @@ -9,6 +10,7 @@ import com.tencent.supersonic.headless.server.service.SchemaService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; import java.util.ArrayList; import java.util.List; @@ -34,7 +36,7 @@ public class WordService { addWordsByType(DictWordType.METRIC, semanticSchema.getMetrics(), words); addWordsByType(DictWordType.ENTITY, semanticSchema.getEntities(), words); addWordsByType(DictWordType.VALUE, semanticSchema.getDimensionValues(), words); - + addWordsByType(DictWordType.TERM, semanticSchema.getTerms(), words); return words; } @@ -54,6 +56,12 @@ public class WordService { } private List distinct(List metas) { + if (CollectionUtils.isEmpty(metas)) { + return metas; + } + if (SchemaElementType.TERM.equals(metas.get(0).getType())) { + return metas; + } return metas.stream() .collect(Collectors.toMap(SchemaElement::getId, Function.identity(), (e1, e2) -> e1)) .values() diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/DataSetSchemaBuilder.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/DataSetSchemaBuilder.java index c50deb226..cd0590267 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/DataSetSchemaBuilder.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/DataSetSchemaBuilder.java @@ -12,6 +12,7 @@ import com.tencent.supersonic.headless.api.pojo.SchemaValueMap; import com.tencent.supersonic.headless.api.pojo.response.DataSetSchemaResp; import com.tencent.supersonic.headless.api.pojo.response.DimSchemaResp; import com.tencent.supersonic.headless.api.pojo.response.MetricSchemaResp; +import com.tencent.supersonic.headless.api.pojo.response.TermResp; import org.apache.logging.log4j.util.Strings; import org.springframework.beans.BeanUtils; import org.springframework.util.CollectionUtils; @@ -54,6 +55,9 @@ public class DataSetSchemaBuilder { Set dimensionValues = getDimensionValues(resp); dataSetSchema.getDimensionValues().addAll(dimensionValues); + Set terms = getTerms(resp); + dataSetSchema.getTerms().addAll(terms); + SchemaElement entity = getEntity(resp); if (Objects.nonNull(entity)) { dataSetSchema.setEntity(entity); @@ -230,6 +234,28 @@ public class DataSetSchemaBuilder { return metrics; } + private static Set getTerms(DataSetSchemaResp resp) { + Set terms = new HashSet<>(); + for (TermResp termResp : resp.getTermResps()) { + List alias = termResp.getAlias(); + SchemaElement metricToAdd = SchemaElement.builder() + .dataSet(resp.getId()) + .dataSetName(resp.getName()) + .model(-1L) + .id(termResp.getId()) + .name(termResp.getName()) + .bizName(termResp.getName()) + .type(SchemaElementType.TERM) + .useCnt(0L) + .alias(alias) + .description(termResp.getDescription()) + .build(); + terms.add(metricToAdd); + + } + return terms; + } + private static List getRelateSchemaElement(MetricSchemaResp metricSchemaResp) { RelateDimension relateDimension = metricSchemaResp.getRelateDimension(); if (relateDimension == null || CollectionUtils.isEmpty(relateDimension.getDrillDownDimensions())) { diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/DomainConvert.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/DomainConvert.java index 151905e54..a9e7b4a2d 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/DomainConvert.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/DomainConvert.java @@ -10,6 +10,7 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import java.util.Arrays; +import java.util.HashMap; import java.util.Map; public class DomainConvert { @@ -40,4 +41,8 @@ public class DomainConvert { return domainResp; } + public static DomainResp convert(DomainDO domainDO) { + return convert(domainDO, new HashMap<>()); + } + } diff --git a/launchers/standalone/src/main/java/com/tencent/supersonic/ModelDemoDataLoader.java b/launchers/standalone/src/main/java/com/tencent/supersonic/ModelDemoDataLoader.java index 9765dcd85..783162f23 100644 --- a/launchers/standalone/src/main/java/com/tencent/supersonic/ModelDemoDataLoader.java +++ b/launchers/standalone/src/main/java/com/tencent/supersonic/ModelDemoDataLoader.java @@ -49,6 +49,7 @@ import com.tencent.supersonic.headless.api.pojo.request.MetricReq; import com.tencent.supersonic.headless.api.pojo.request.ModelReq; import com.tencent.supersonic.headless.api.pojo.request.TagObjectReq; import com.tencent.supersonic.headless.api.pojo.request.TagReq; +import com.tencent.supersonic.headless.api.pojo.request.TermReq; import com.tencent.supersonic.headless.server.service.DataSetService; import com.tencent.supersonic.headless.server.service.DatabaseService; import com.tencent.supersonic.headless.server.service.DimensionService; @@ -58,6 +59,7 @@ import com.tencent.supersonic.headless.server.service.ModelRelaService; import com.tencent.supersonic.headless.server.service.ModelService; import com.tencent.supersonic.headless.server.service.TagMetaService; import com.tencent.supersonic.headless.server.service.TagObjectService; +import com.tencent.supersonic.headless.server.service.TermService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -94,9 +96,10 @@ public class ModelDemoDataLoader { private DataSourceProperties dataSourceProperties; @Autowired private TagObjectService tagObjectService; - @Autowired private TagMetaService tagMetaService; + @Autowired + private TermService termService; public void doRun() { try { @@ -121,6 +124,8 @@ public class ModelDemoDataLoader { addDataSet_2(); addAuthGroup_1(); addAuthGroup_2(); + addTerm(); + addTerm_1(); } catch (Exception e) { log.error("Failed to add model demo data", e); } @@ -556,6 +561,24 @@ public class ModelDemoDataLoader { dataSetService.save(dataSetReq, User.getFakeUser()); } + public void addTerm() { + TermReq termReq = new TermReq(); + termReq.setName("近期"); + termReq.setDescription("指近10天"); + termReq.setAlias(Lists.newArrayList("近一段时间")); + termReq.setDomainId(1L); + termService.saveOrUpdate(termReq, User.getFakeUser()); + } + + public void addTerm_1() { + TermReq termReq = new TermReq(); + termReq.setName("核心用户"); + termReq.setDescription("核心用户指tom和lucy"); + termReq.setAlias(Lists.newArrayList("VIP用户")); + termReq.setDomainId(1L); + termService.saveOrUpdate(termReq, User.getFakeUser()); + } + public void addAuthGroup_1() { AuthGroup authGroupReq = new AuthGroup(); authGroupReq.setModelId(3L); diff --git a/launchers/standalone/src/main/resources/config.update/sql-update.sql b/launchers/standalone/src/main/resources/config.update/sql-update.sql index 26f08d130..c5cca5769 100644 --- a/launchers/standalone/src/main/resources/config.update/sql-update.sql +++ b/launchers/standalone/src/main/resources/config.update/sql-update.sql @@ -296,10 +296,12 @@ update s2_metric set is_publish = 1; alter table s2_dimension add column `ext` varchar(1000) DEFAULT NULL; --20240510 -CREATE TABLE IF NOT EXISTS `s2_term_set` ( +CREATE TABLE IF NOT EXISTS `s2_term` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `domain_id` bigint(20), - `terms` varchar(1000), + `name` varchar(255) NOT NULL , + `description` varchar(500) DEFAULT NULL , + `alias` varchar(1000) NOT NULL , `created_at` datetime NOT NULL , `created_by` varchar(100) NOT NULL , `updated_at` datetime DEFAULT NULL , diff --git a/launchers/standalone/src/main/resources/db/schema-h2.sql b/launchers/standalone/src/main/resources/db/schema-h2.sql index 9b99dea0e..9412b14b9 100644 --- a/launchers/standalone/src/main/resources/db/schema-h2.sql +++ b/launchers/standalone/src/main/resources/db/schema-h2.sql @@ -627,14 +627,16 @@ CREATE TABLE IF NOT EXISTS `s2_query_rule` ( ); COMMENT ON TABLE s2_query_rule IS 'tag query rule table'; -CREATE TABLE IF NOT EXISTS `s2_term_set` ( +CREATE TABLE IF NOT EXISTS `s2_term` ( `id` INT NOT NULL AUTO_INCREMENT, `domain_id` INT , - `terms` varchar(1000), + `name` varchar(255) NOT NULL , + `description` varchar(500) DEFAULT NULL , + `alias` varchar(1000) NOT NULL , `created_at` TIMESTAMP NOT NULL , `created_by` varchar(100) NOT NULL , `updated_at` TIMESTAMP DEFAULT NULL , `updated_by` varchar(100) DEFAULT NULL , PRIMARY KEY (`id`) ); -COMMENT ON TABLE s2_term_set IS 'term info'; \ No newline at end of file +COMMENT ON TABLE s2_term IS 'term info'; \ No newline at end of file diff --git a/launchers/standalone/src/main/resources/db/schema-mysql.sql b/launchers/standalone/src/main/resources/db/schema-mysql.sql index 171a5ce73..779d25461 100644 --- a/launchers/standalone/src/main/resources/db/schema-mysql.sql +++ b/launchers/standalone/src/main/resources/db/schema-mysql.sql @@ -550,10 +550,12 @@ CREATE TABLE IF NOT EXISTS `s2_query_rule` ( PRIMARY KEY (`id`) ) ENGINE = InnoDB DEFAULT CHARSET = utf8 COMMENT ='查询规则表'; -CREATE TABLE IF NOT EXISTS `s2_term_set` ( +CREATE TABLE IF NOT EXISTS `s2_term` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `domain_id` bigint(20), - `terms` varchar(1000), + `name` varchar(255) NOT NULL , + `description` varchar(500) DEFAULT NULL , + `alias` varchar(1000) NOT NULL , `created_at` datetime NOT NULL , `created_by` varchar(100) NOT NULL , `updated_at` datetime DEFAULT NULL , diff --git a/launchers/standalone/src/test/resources/db/schema-h2.sql b/launchers/standalone/src/test/resources/db/schema-h2.sql index 3f4de20c2..9412b14b9 100644 --- a/launchers/standalone/src/test/resources/db/schema-h2.sql +++ b/launchers/standalone/src/test/resources/db/schema-h2.sql @@ -627,14 +627,16 @@ CREATE TABLE IF NOT EXISTS `s2_query_rule` ( ); COMMENT ON TABLE s2_query_rule IS 'tag query rule table'; -CREATE TABLE IF NOT EXISTS `s2_term_set` ( - `id` INT NOT NULL AUTO_INCREMENT, - `domain_id` INT , - `terms` varchar(1000), +CREATE TABLE IF NOT EXISTS `s2_term` ( + `id` INT NOT NULL AUTO_INCREMENT, + `domain_id` INT , + `name` varchar(255) NOT NULL , + `description` varchar(500) DEFAULT NULL , + `alias` varchar(1000) NOT NULL , `created_at` TIMESTAMP NOT NULL , `created_by` varchar(100) NOT NULL , `updated_at` TIMESTAMP DEFAULT NULL , `updated_by` varchar(100) DEFAULT NULL , PRIMARY KEY (`id`) ); -COMMENT ON TABLE s2_term_set IS 'term info'; \ No newline at end of file +COMMENT ON TABLE s2_term IS 'term info'; \ No newline at end of file