mirror of
https://github.com/tencentmusic/supersonic.git
synced 2025-12-12 04:27:39 +00:00
(improvement)(Headless) Add terms management to help the model learn private domain knowledge (#979)
This commit is contained in:
@@ -0,0 +1,15 @@
|
|||||||
|
package com.tencent.supersonic.headless.api.pojo;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class Term {
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
private String description;
|
||||||
|
|
||||||
|
private List<String> similarTerms;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
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 {
|
||||||
|
|
||||||
|
@NotNull(message = "主题域ID不可为空")
|
||||||
|
private Long domainId;
|
||||||
|
|
||||||
|
private List<Term> terms = Lists.newArrayList();
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.tencent.supersonic.headless.api.pojo.response;
|
package com.tencent.supersonic.headless.api.pojo.response;
|
||||||
|
|
||||||
import com.tencent.supersonic.headless.api.pojo.SchemaElementMatch;
|
import com.tencent.supersonic.headless.api.pojo.SchemaElementMatch;
|
||||||
|
import com.tencent.supersonic.headless.api.pojo.Term;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -15,4 +16,6 @@ public class MapInfoResp {
|
|||||||
|
|
||||||
private Map<String, List<SchemaElementMatch>> topFields;
|
private Map<String, List<SchemaElementMatch>> topFields;
|
||||||
|
|
||||||
|
private Map<String, List<Term>> terms;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,24 @@
|
|||||||
|
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 java.util.List;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class TermSetResp extends RecordInfo {
|
||||||
|
|
||||||
|
private Long domainId;
|
||||||
|
|
||||||
|
private List<Term> terms = Lists.newArrayList();
|
||||||
|
|
||||||
|
public TermSetResp(Long domainId) {
|
||||||
|
this.domainId = domainId;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
package com.tencent.supersonic.headless.server.persistence.dataobject;
|
||||||
|
|
||||||
|
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 {
|
||||||
|
|
||||||
|
@TableId(value = "id", type = IdType.AUTO)
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
private Long domainId;
|
||||||
|
|
||||||
|
private String terms;
|
||||||
|
|
||||||
|
private Date createdAt;
|
||||||
|
|
||||||
|
private String createdBy;
|
||||||
|
|
||||||
|
private Date updatedAt;
|
||||||
|
|
||||||
|
private String updatedBy;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +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 org.apache.ibatis.annotations.Mapper;
|
||||||
|
|
||||||
|
@Mapper
|
||||||
|
public interface TermSetMapper extends BaseMapper<TermSetDO> {
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -47,12 +47,10 @@ public class DataSetController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/getDataSetList")
|
@GetMapping("/getDataSetList")
|
||||||
public List<DataSetResp> getDataSetList(@RequestParam("domainId") Long domainId,
|
public List<DataSetResp> getDataSetList(@RequestParam("domainId") Long domainId) {
|
||||||
HttpServletRequest request, HttpServletResponse response) {
|
|
||||||
MetaFilter metaFilter = new MetaFilter();
|
MetaFilter metaFilter = new MetaFilter();
|
||||||
metaFilter.setDomainId(domainId);
|
metaFilter.setDomainId(domainId);
|
||||||
User user = UserHolder.findUser(request, response);
|
return dataSetService.getDataSetList(metaFilter);
|
||||||
return dataSetService.getDataSetList(metaFilter, user);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@DeleteMapping("/{id}")
|
@DeleteMapping("/{id}")
|
||||||
|
|||||||
@@ -12,11 +12,6 @@ import com.tencent.supersonic.headless.api.pojo.response.TagResp;
|
|||||||
import com.tencent.supersonic.headless.server.persistence.dataobject.TagDO;
|
import com.tencent.supersonic.headless.server.persistence.dataobject.TagDO;
|
||||||
import com.tencent.supersonic.headless.server.pojo.TagFilter;
|
import com.tencent.supersonic.headless.server.pojo.TagFilter;
|
||||||
import com.tencent.supersonic.headless.server.service.TagMetaService;
|
import com.tencent.supersonic.headless.server.service.TagMetaService;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
|
||||||
import javax.validation.Valid;
|
|
||||||
|
|
||||||
import com.tencent.supersonic.headless.server.service.TagQueryService;
|
import com.tencent.supersonic.headless.server.service.TagQueryService;
|
||||||
import org.springframework.web.bind.annotation.DeleteMapping;
|
import org.springframework.web.bind.annotation.DeleteMapping;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
@@ -26,6 +21,9 @@ import org.springframework.web.bind.annotation.RequestBody;
|
|||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import javax.validation.Valid;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@@ -130,17 +128,11 @@ public class TagController {
|
|||||||
* 标签查询
|
* 标签查询
|
||||||
*
|
*
|
||||||
* @param tagFilter
|
* @param tagFilter
|
||||||
* @param request
|
|
||||||
* @param response
|
|
||||||
* @return
|
* @return
|
||||||
* @throws Exception
|
|
||||||
*/
|
*/
|
||||||
@PostMapping("/queryTag")
|
@PostMapping("/queryTag")
|
||||||
public List<TagDO> queryPage(@RequestBody TagFilter tagFilter,
|
public List<TagDO> queryPage(@RequestBody TagFilter tagFilter) {
|
||||||
HttpServletRequest request,
|
return tagMetaService.getTagDOList(tagFilter);
|
||||||
HttpServletResponse response) throws Exception {
|
|
||||||
User user = UserHolder.findUser(request, response);
|
|
||||||
return tagMetaService.getTagDOList(tagFilter, user);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,40 @@
|
|||||||
|
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.server.service.TermService;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/api/semantic/term")
|
||||||
|
public class TermController {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private TermService termService;
|
||||||
|
|
||||||
|
@PostMapping("/saveOrUpdate")
|
||||||
|
public boolean saveOrUpdate(@RequestBody TermSetReq termSetReq,
|
||||||
|
HttpServletRequest request,
|
||||||
|
HttpServletResponse response) {
|
||||||
|
User user = UserHolder.findUser(request, response);
|
||||||
|
termService.saveOrUpdate(termSetReq, user);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping
|
||||||
|
public TermSetResp getTermSet(@RequestParam("domainId") Long domainId) {
|
||||||
|
return termService.getTermSet(domainId);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -18,7 +18,7 @@ public interface DataSetService {
|
|||||||
|
|
||||||
DataSetResp getDataSet(Long id);
|
DataSetResp getDataSet(Long id);
|
||||||
|
|
||||||
List<DataSetResp> getDataSetList(MetaFilter metaFilter, User user);
|
List<DataSetResp> getDataSetList(MetaFilter metaFilter);
|
||||||
|
|
||||||
void delete(Long id, User user);
|
void delete(Long id, User user);
|
||||||
|
|
||||||
@@ -32,8 +32,6 @@ public interface DataSetService {
|
|||||||
|
|
||||||
List<DataSetResp> getDataSets(List<String> dataSetNames, User user);
|
List<DataSetResp> getDataSets(List<String> dataSetNames, User user);
|
||||||
|
|
||||||
Map<Long, String> getDataSetIdToNameMap(List<Long> dataSetIds);
|
|
||||||
|
|
||||||
List<DataSetResp> getDataSetsInheritAuth(User user, Long domainId);
|
List<DataSetResp> getDataSetsInheritAuth(User user, Long domainId);
|
||||||
|
|
||||||
SemanticQueryReq convert(QueryDataSetReq queryDataSetReq);
|
SemanticQueryReq convert(QueryDataSetReq queryDataSetReq);
|
||||||
|
|||||||
@@ -27,9 +27,9 @@ public interface TagMetaService {
|
|||||||
|
|
||||||
List<TagResp> getTags(TagFilter tagFilter);
|
List<TagResp> getTags(TagFilter tagFilter);
|
||||||
|
|
||||||
List<TagDO> getTagDOList(TagFilter tagFilter, User user);
|
List<TagDO> getTagDOList(TagFilter tagFilter);
|
||||||
|
|
||||||
PageInfo<TagResp> queryTagMarketPage(TagFilterPageReq tagMarketPageReq, User user);
|
PageInfo<TagResp> queryTagMarketPage(TagFilterPageReq tagMarketPageReq, User user);
|
||||||
|
|
||||||
List<TagItem> getTagItems(User user, List<Long> itemIds, TagDefineType tagDefineType);
|
List<TagItem> getTagItems(List<Long> itemIds, TagDefineType tagDefineType);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
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 java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
public interface TermService {
|
||||||
|
|
||||||
|
void saveOrUpdate(TermSetReq termSetReq, User user);
|
||||||
|
|
||||||
|
TermSetResp getTermSet(Long domainId);
|
||||||
|
|
||||||
|
Map<Long, List<Term>> getTermSets(Set<Long> domainIds);
|
||||||
|
|
||||||
|
}
|
||||||
@@ -84,7 +84,7 @@ public class DataSetServiceImpl
|
|||||||
dataSetReq.createdBy(user.getName());
|
dataSetReq.createdBy(user.getName());
|
||||||
DataSetDO dataSetDO = convert(dataSetReq);
|
DataSetDO dataSetDO = convert(dataSetReq);
|
||||||
dataSetDO.setStatus(StatusEnum.ONLINE.getCode());
|
dataSetDO.setStatus(StatusEnum.ONLINE.getCode());
|
||||||
DataSetResp dataSetResp = convert(dataSetDO, user);
|
DataSetResp dataSetResp = convert(dataSetDO);
|
||||||
conflictCheck(dataSetResp);
|
conflictCheck(dataSetResp);
|
||||||
save(dataSetDO);
|
save(dataSetDO);
|
||||||
return dataSetResp;
|
return dataSetResp;
|
||||||
@@ -94,7 +94,7 @@ public class DataSetServiceImpl
|
|||||||
public DataSetResp update(DataSetReq dataSetReq, User user) {
|
public DataSetResp update(DataSetReq dataSetReq, User user) {
|
||||||
dataSetReq.updatedBy(user.getName());
|
dataSetReq.updatedBy(user.getName());
|
||||||
DataSetDO dataSetDO = convert(dataSetReq);
|
DataSetDO dataSetDO = convert(dataSetReq);
|
||||||
DataSetResp dataSetResp = convert(dataSetDO, user);
|
DataSetResp dataSetResp = convert(dataSetDO);
|
||||||
conflictCheck(dataSetResp);
|
conflictCheck(dataSetResp);
|
||||||
updateById(dataSetDO);
|
updateById(dataSetDO);
|
||||||
return dataSetResp;
|
return dataSetResp;
|
||||||
@@ -103,11 +103,11 @@ public class DataSetServiceImpl
|
|||||||
@Override
|
@Override
|
||||||
public DataSetResp getDataSet(Long id) {
|
public DataSetResp getDataSet(Long id) {
|
||||||
DataSetDO dataSetDO = getById(id);
|
DataSetDO dataSetDO = getById(id);
|
||||||
return convert(dataSetDO, User.getFakeUser());
|
return convert(dataSetDO);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<DataSetResp> getDataSetList(MetaFilter metaFilter, User user) {
|
public List<DataSetResp> getDataSetList(MetaFilter metaFilter) {
|
||||||
QueryWrapper<DataSetDO> wrapper = new QueryWrapper<>();
|
QueryWrapper<DataSetDO> wrapper = new QueryWrapper<>();
|
||||||
if (metaFilter.getDomainId() != null) {
|
if (metaFilter.getDomainId() != null) {
|
||||||
wrapper.lambda().eq(DataSetDO::getDomainId, metaFilter.getDomainId());
|
wrapper.lambda().eq(DataSetDO::getDomainId, metaFilter.getDomainId());
|
||||||
@@ -125,7 +125,7 @@ public class DataSetServiceImpl
|
|||||||
wrapper.lambda().in(DataSetDO::getName, metaFilter.getNames());
|
wrapper.lambda().in(DataSetDO::getName, metaFilter.getNames());
|
||||||
}
|
}
|
||||||
wrapper.lambda().ne(DataSetDO::getStatus, StatusEnum.DELETED.getCode());
|
wrapper.lambda().ne(DataSetDO::getStatus, StatusEnum.DELETED.getCode());
|
||||||
return list(wrapper).stream().map(entry -> convert(entry, user)).collect(Collectors.toList());
|
return list(wrapper).stream().map(this::convert).collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -158,22 +158,13 @@ public class DataSetServiceImpl
|
|||||||
}
|
}
|
||||||
|
|
||||||
private List<DataSetResp> getDataSetsByAuth(User user, MetaFilter metaFilter) {
|
private List<DataSetResp> getDataSetsByAuth(User user, MetaFilter metaFilter) {
|
||||||
List<DataSetResp> dataSetResps = getDataSetList(metaFilter, user);
|
List<DataSetResp> dataSetResps = getDataSetList(metaFilter);
|
||||||
return getDataSetFilterByAuth(dataSetResps, user);
|
return getDataSetFilterByAuth(dataSetResps, user);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public Map<Long, String> getDataSetIdToNameMap(List<Long> dataSetIds) {
|
|
||||||
MetaFilter metaFilter = new MetaFilter();
|
|
||||||
metaFilter.setIds(dataSetIds);
|
|
||||||
List<DataSetResp> dataSetResps = getDataSetList(metaFilter, User.getFakeUser());
|
|
||||||
return dataSetResps.stream().collect(
|
|
||||||
Collectors.toMap(DataSetResp::getId, DataSetResp::getName, (k1, k2) -> k1));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<DataSetResp> getDataSetsInheritAuth(User user, Long domainId) {
|
public List<DataSetResp> getDataSetsInheritAuth(User user, Long domainId) {
|
||||||
List<DataSetResp> dataSetResps = getDataSetList(new MetaFilter(), user);
|
List<DataSetResp> dataSetResps = getDataSetList(new MetaFilter());
|
||||||
List<DataSetResp> inheritAuthFormDomain = getDataSetFilterByDomainAuth(dataSetResps, user);
|
List<DataSetResp> inheritAuthFormDomain = getDataSetFilterByDomainAuth(dataSetResps, user);
|
||||||
Set<DataSetResp> dataSetRespSet = new HashSet<>(inheritAuthFormDomain);
|
Set<DataSetResp> dataSetRespSet = new HashSet<>(inheritAuthFormDomain);
|
||||||
List<DataSetResp> dataSetFilterByAuth = getDataSetFilterByAuth(dataSetResps, user);
|
List<DataSetResp> dataSetFilterByAuth = getDataSetFilterByAuth(dataSetResps, user);
|
||||||
@@ -202,7 +193,7 @@ public class DataSetServiceImpl
|
|||||||
domainIds.contains(dataSetResp.getDomainId())).collect(Collectors.toList());
|
domainIds.contains(dataSetResp.getDomainId())).collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
private DataSetResp convert(DataSetDO dataSetDO, User user) {
|
private DataSetResp convert(DataSetDO dataSetDO) {
|
||||||
DataSetResp dataSetResp = new DataSetResp();
|
DataSetResp dataSetResp = new DataSetResp();
|
||||||
BeanMapper.mapper(dataSetDO, dataSetResp);
|
BeanMapper.mapper(dataSetDO, dataSetResp);
|
||||||
dataSetResp.setDataSetDetail(JSONObject.parseObject(dataSetDO.getDataSetDetail(), DataSetDetail.class));
|
dataSetResp.setDataSetDetail(JSONObject.parseObject(dataSetDO.getDataSetDetail(), DataSetDetail.class));
|
||||||
@@ -214,11 +205,11 @@ public class DataSetServiceImpl
|
|||||||
dataSetResp.setAdminOrgs(StringUtils.isBlank(dataSetDO.getAdminOrg())
|
dataSetResp.setAdminOrgs(StringUtils.isBlank(dataSetDO.getAdminOrg())
|
||||||
? Lists.newArrayList() : Arrays.asList(dataSetDO.getAdminOrg().split(",")));
|
? Lists.newArrayList() : Arrays.asList(dataSetDO.getAdminOrg().split(",")));
|
||||||
dataSetResp.setTypeEnum(TypeEnums.DATASET);
|
dataSetResp.setTypeEnum(TypeEnums.DATASET);
|
||||||
List<TagItem> dimensionItems = tagMetaService.getTagItems(user, dataSetResp.dimensionIds(),
|
List<TagItem> dimensionItems = tagMetaService.getTagItems(dataSetResp.dimensionIds(),
|
||||||
TagDefineType.DIMENSION);
|
TagDefineType.DIMENSION);
|
||||||
dataSetResp.setAllDimensions(dimensionItems);
|
dataSetResp.setAllDimensions(dimensionItems);
|
||||||
|
|
||||||
List<TagItem> metricItems = tagMetaService.getTagItems(user, dataSetResp.metricIds(), TagDefineType.METRIC);
|
List<TagItem> metricItems = tagMetaService.getTagItems(dataSetResp.metricIds(), TagDefineType.METRIC);
|
||||||
dataSetResp.setAllMetrics(metricItems);
|
dataSetResp.setAllMetrics(metricItems);
|
||||||
return dataSetResp;
|
return dataSetResp;
|
||||||
}
|
}
|
||||||
@@ -259,7 +250,7 @@ public class DataSetServiceImpl
|
|||||||
metaFilter.setIds(dataSetIds);
|
metaFilter.setIds(dataSetIds);
|
||||||
List<DataSetResp> dataSetList = dataSetSchemaCache.getIfPresent(metaFilter);
|
List<DataSetResp> dataSetList = dataSetSchemaCache.getIfPresent(metaFilter);
|
||||||
if (CollectionUtils.isEmpty(dataSetList)) {
|
if (CollectionUtils.isEmpty(dataSetList)) {
|
||||||
dataSetList = getDataSetList(metaFilter, user);
|
dataSetList = getDataSetList(metaFilter);
|
||||||
dataSetSchemaCache.put(metaFilter, dataSetList);
|
dataSetSchemaCache.put(metaFilter, dataSetList);
|
||||||
}
|
}
|
||||||
return dataSetList.stream()
|
return dataSetList.stream()
|
||||||
|
|||||||
@@ -246,7 +246,7 @@ public class DimensionServiceImpl implements DimensionService {
|
|||||||
|
|
||||||
List<Long> dimensionIds = dimensionResps.stream().map(dimensionResp -> dimensionResp.getId())
|
List<Long> dimensionIds = dimensionResps.stream().map(dimensionResp -> dimensionResp.getId())
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
List<TagItem> tagItems = tagMetaService.getTagItems(User.getFakeUser(), dimensionIds, TagDefineType.DIMENSION);
|
List<TagItem> tagItems = tagMetaService.getTagItems(dimensionIds, TagDefineType.DIMENSION);
|
||||||
Map<Long, TagItem> itemIdToTagItem = tagItems.stream()
|
Map<Long, TagItem> itemIdToTagItem = tagItems.stream()
|
||||||
.collect(Collectors.toMap(tag -> tag.getItemId(), tag -> tag, (newTag, oldTag) -> newTag));
|
.collect(Collectors.toMap(tag -> tag.getItemId(), tag -> tag, (newTag, oldTag) -> newTag));
|
||||||
|
|
||||||
@@ -325,7 +325,7 @@ public class DimensionServiceImpl implements DimensionService {
|
|||||||
List<Long> dimensionIds = dimensionResps.stream().map(dimension -> dimension.getId())
|
List<Long> dimensionIds = dimensionResps.stream().map(dimension -> dimension.getId())
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
tagFilter.setItemIds(dimensionIds);
|
tagFilter.setItemIds(dimensionIds);
|
||||||
Map<Long, TagDO> keyAndTagMap = tagMetaService.getTagDOList(tagFilter, User.getFakeUser()).stream()
|
Map<Long, TagDO> keyAndTagMap = tagMetaService.getTagDOList(tagFilter).stream()
|
||||||
.collect(Collectors.toMap(tag -> tag.getItemId(), tag -> tag,
|
.collect(Collectors.toMap(tag -> tag.getItemId(), tag -> tag,
|
||||||
(newTag, oldTag) -> newTag));
|
(newTag, oldTag) -> newTag));
|
||||||
if (Objects.nonNull(keyAndTagMap)) {
|
if (Objects.nonNull(keyAndTagMap)) {
|
||||||
|
|||||||
@@ -4,17 +4,21 @@ import com.tencent.supersonic.common.pojo.enums.TimeDimensionEnum;
|
|||||||
import com.tencent.supersonic.headless.api.pojo.SchemaElement;
|
import com.tencent.supersonic.headless.api.pojo.SchemaElement;
|
||||||
import com.tencent.supersonic.headless.api.pojo.SchemaElementMatch;
|
import com.tencent.supersonic.headless.api.pojo.SchemaElementMatch;
|
||||||
import com.tencent.supersonic.headless.api.pojo.SchemaElementType;
|
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.SchemaMapInfo;
|
||||||
import com.tencent.supersonic.headless.api.pojo.SemanticSchema;
|
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.QueryMapReq;
|
||||||
import com.tencent.supersonic.headless.api.pojo.request.QueryReq;
|
import com.tencent.supersonic.headless.api.pojo.request.QueryReq;
|
||||||
import com.tencent.supersonic.headless.api.pojo.response.DataSetResp;
|
import com.tencent.supersonic.headless.api.pojo.response.DataSetResp;
|
||||||
import com.tencent.supersonic.headless.api.pojo.response.MapInfoResp;
|
import com.tencent.supersonic.headless.api.pojo.response.MapInfoResp;
|
||||||
import com.tencent.supersonic.headless.api.pojo.response.MapResp;
|
import com.tencent.supersonic.headless.api.pojo.response.MapResp;
|
||||||
import com.tencent.supersonic.headless.core.chat.knowledge.builder.BaseWordBuilder;
|
import com.tencent.supersonic.headless.core.chat.knowledge.builder.BaseWordBuilder;
|
||||||
|
import com.tencent.supersonic.headless.server.pojo.MetaFilter;
|
||||||
import com.tencent.supersonic.headless.server.service.ChatQueryService;
|
import com.tencent.supersonic.headless.server.service.ChatQueryService;
|
||||||
import com.tencent.supersonic.headless.server.service.DataSetService;
|
import com.tencent.supersonic.headless.server.service.DataSetService;
|
||||||
import com.tencent.supersonic.headless.server.service.MetaDiscoveryService;
|
import com.tencent.supersonic.headless.server.service.MetaDiscoveryService;
|
||||||
|
import com.tencent.supersonic.headless.server.service.TermService;
|
||||||
import org.apache.commons.collections4.CollectionUtils;
|
import org.apache.commons.collections4.CollectionUtils;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.BeanUtils;
|
||||||
@@ -43,30 +47,37 @@ public class MetaDiscoveryServiceImpl implements MetaDiscoveryService {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private SemanticService semanticService;
|
private SemanticService semanticService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private TermService termService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public MapInfoResp getMapMeta(QueryMapReq queryMapReq) {
|
public MapInfoResp getMapMeta(QueryMapReq queryMapReq) {
|
||||||
|
|
||||||
QueryReq queryReq = new QueryReq();
|
QueryReq queryReq = new QueryReq();
|
||||||
BeanUtils.copyProperties(queryMapReq, queryReq);
|
BeanUtils.copyProperties(queryMapReq, queryReq);
|
||||||
List<DataSetResp> dataSets = dataSetService.getDataSets(queryMapReq.getDataSetNames(), queryMapReq.getUser());
|
List<DataSetResp> dataSets = dataSetService.getDataSets(queryMapReq.getDataSetNames(), queryMapReq.getUser());
|
||||||
Set<Long> dataSetIds = dataSets.stream().map(dataSetResp -> dataSetResp.getId()).collect(Collectors.toSet());
|
|
||||||
queryReq.setDataSetIds(dataSetIds);
|
|
||||||
|
|
||||||
|
Set<Long> dataSetIds = dataSets.stream().map(SchemaItem::getId).collect(Collectors.toSet());
|
||||||
|
queryReq.setDataSetIds(dataSetIds);
|
||||||
MapResp mapResp = chatQueryService.performMapping(queryReq);
|
MapResp mapResp = chatQueryService.performMapping(queryReq);
|
||||||
return convert(mapResp, queryMapReq.getTopN());
|
return convert(mapResp, queryMapReq.getTopN());
|
||||||
}
|
}
|
||||||
|
|
||||||
public MapInfoResp convert(MapResp mapResp, Integer topN) {
|
private MapInfoResp convert(MapResp mapResp, Integer topN) {
|
||||||
MapInfoResp mapInfoResp = new MapInfoResp();
|
MapInfoResp mapInfoResp = new MapInfoResp();
|
||||||
if (Objects.isNull(mapResp)) {
|
if (Objects.isNull(mapResp)) {
|
||||||
return mapInfoResp;
|
return mapInfoResp;
|
||||||
}
|
}
|
||||||
BeanUtils.copyProperties(mapResp, mapInfoResp);
|
BeanUtils.copyProperties(mapResp, mapInfoResp);
|
||||||
Set<Long> dataSetIds = mapResp.getMapInfo().getDataSetElementMatches().keySet();
|
Set<Long> dataSetIds = mapResp.getMapInfo().getDataSetElementMatches().keySet();
|
||||||
Map<Long, String> dataSetMap = dataSetService.getDataSetIdToNameMap(new ArrayList<>(dataSetIds));
|
MetaFilter metaFilter = new MetaFilter();
|
||||||
|
metaFilter.setIds(new ArrayList<>(dataSetIds));
|
||||||
|
List<DataSetResp> dataSetList = dataSetService.getDataSetList(metaFilter);
|
||||||
|
Map<Long, String> dataSetMap = dataSetList.stream()
|
||||||
|
.collect(Collectors.toMap(DataSetResp::getId, DataSetResp::getName));
|
||||||
mapInfoResp.setMapFields(getMapFields(mapResp.getMapInfo(), dataSetMap));
|
mapInfoResp.setMapFields(getMapFields(mapResp.getMapInfo(), dataSetMap));
|
||||||
mapInfoResp.setTopFields(getTopFields(topN, mapResp.getMapInfo(), dataSetMap));
|
mapInfoResp.setTopFields(getTopFields(topN, mapResp.getMapInfo(), dataSetMap));
|
||||||
|
mapInfoResp.setTerms(getTerms(dataSetList, dataSetMap));
|
||||||
return mapInfoResp;
|
return mapInfoResp;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -114,6 +125,19 @@ public class MetaDiscoveryServiceImpl implements MetaDiscoveryService {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Map<String, List<Term>> getTerms(List<DataSetResp> dataSets, Map<Long, String> dataSetNameMap) {
|
||||||
|
Set<Long> domainIds = dataSets.stream().map(DataSetResp::getDomainId).collect(Collectors.toSet());
|
||||||
|
Map<Long, Long> dataSetDomainIdMap = dataSets.stream()
|
||||||
|
.collect(Collectors.toMap(DataSetResp::getId, DataSetResp::getDomainId));
|
||||||
|
Map<Long, List<Term>> domainTermSetMap = termService.getTermSets(domainIds);
|
||||||
|
Map<String, List<Term>> dataSetTermSetMap = new HashMap<>();
|
||||||
|
for (DataSetResp dataSet : dataSets) {
|
||||||
|
dataSetTermSetMap.put(dataSetNameMap.get(dataSet.getId()),
|
||||||
|
domainTermSetMap.get(dataSetDomainIdMap.get(dataSet.getId())));
|
||||||
|
}
|
||||||
|
return dataSetTermSetMap;
|
||||||
|
}
|
||||||
|
|
||||||
/***
|
/***
|
||||||
* get time dimension SchemaElementMatch
|
* get time dimension SchemaElementMatch
|
||||||
* @param dataSetId
|
* @param dataSetId
|
||||||
|
|||||||
@@ -316,7 +316,7 @@ public class MetricServiceImpl implements MetricService {
|
|||||||
List<MetricResp> metricResps = convertList(queryMetric(metricFilter));
|
List<MetricResp> metricResps = convertList(queryMetric(metricFilter));
|
||||||
List<Long> metricIds = metricResps.stream().map(metricResp -> metricResp.getId()).collect(Collectors.toList());
|
List<Long> metricIds = metricResps.stream().map(metricResp -> metricResp.getId()).collect(Collectors.toList());
|
||||||
|
|
||||||
List<TagItem> tagItems = tagMetaService.getTagItems(User.getFakeUser(), metricIds, TagDefineType.METRIC);
|
List<TagItem> tagItems = tagMetaService.getTagItems(metricIds, TagDefineType.METRIC);
|
||||||
Map<Long, TagItem> itemIdToTagItem = tagItems.stream()
|
Map<Long, TagItem> itemIdToTagItem = tagItems.stream()
|
||||||
.collect(Collectors.toMap(tag -> tag.getItemId(), tag -> tag, (newTag, oldTag) -> newTag));
|
.collect(Collectors.toMap(tag -> tag.getItemId(), tag -> tag, (newTag, oldTag) -> newTag));
|
||||||
|
|
||||||
@@ -374,7 +374,7 @@ public class MetricServiceImpl implements MetricService {
|
|||||||
List<Long> metricIds = metricRespList.stream().map(metric -> metric.getId())
|
List<Long> metricIds = metricRespList.stream().map(metric -> metric.getId())
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
tagFilter.setItemIds(metricIds);
|
tagFilter.setItemIds(metricIds);
|
||||||
Map<Long, TagDO> keyAndTagMap = tagMetaService.getTagDOList(tagFilter, User.getFakeUser()).stream()
|
Map<Long, TagDO> keyAndTagMap = tagMetaService.getTagDOList(tagFilter).stream()
|
||||||
.collect(Collectors.toMap(tag -> tag.getItemId(), tag -> tag,
|
.collect(Collectors.toMap(tag -> tag.getItemId(), tag -> tag,
|
||||||
(newTag, oldTag) -> newTag));
|
(newTag, oldTag) -> newTag));
|
||||||
if (Objects.nonNull(keyAndTagMap)) {
|
if (Objects.nonNull(keyAndTagMap)) {
|
||||||
|
|||||||
@@ -163,7 +163,7 @@ public class SchemaServiceImpl implements SchemaService {
|
|||||||
MetaFilter metaFilter = new MetaFilter();
|
MetaFilter metaFilter = new MetaFilter();
|
||||||
metaFilter.setStatus(StatusEnum.ONLINE.getCode());
|
metaFilter.setStatus(StatusEnum.ONLINE.getCode());
|
||||||
metaFilter.setIds(filter.getDataSetIds());
|
metaFilter.setIds(filter.getDataSetIds());
|
||||||
List<DataSetResp> dataSetResps = dataSetService.getDataSetList(metaFilter, User.getFakeUser());
|
List<DataSetResp> dataSetResps = dataSetService.getDataSetList(metaFilter);
|
||||||
Map<Long, DataSetResp> dataSetRespMap = getDataSetMap(dataSetResps);
|
Map<Long, DataSetResp> dataSetRespMap = getDataSetMap(dataSetResps);
|
||||||
|
|
||||||
List<Long> modelIds = dataSetRespMap.values().stream().map(DataSetResp::getAllModels)
|
List<Long> modelIds = dataSetRespMap.values().stream().map(DataSetResp::getAllModels)
|
||||||
@@ -404,7 +404,7 @@ public class SchemaServiceImpl implements SchemaService {
|
|||||||
}
|
}
|
||||||
parentItem.getChildren().add(itemResp);
|
parentItem.getChildren().add(itemResp);
|
||||||
}
|
}
|
||||||
List<DataSetResp> dataSetResps = dataSetService.getDataSetList(new MetaFilter(), User.getFakeUser());
|
List<DataSetResp> dataSetResps = dataSetService.getDataSetList(new MetaFilter());
|
||||||
for (DataSetResp dataSetResp : dataSetResps) {
|
for (DataSetResp dataSetResp : dataSetResps) {
|
||||||
ItemResp itemResp = itemRespMap.get(dataSetResp.getDomainId());
|
ItemResp itemResp = itemRespMap.get(dataSetResp.getDomainId());
|
||||||
if (itemResp != null) {
|
if (itemResp != null) {
|
||||||
|
|||||||
@@ -138,7 +138,7 @@ public class TagMetaServiceImpl implements TagMetaService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<TagDO> getTagDOList(TagFilter tagFilter, User user) {
|
public List<TagDO> getTagDOList(TagFilter tagFilter) {
|
||||||
return tagRepository.getTagDOList(tagFilter);
|
return tagRepository.getTagDOList(tagFilter);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -388,11 +388,11 @@ public class TagMetaServiceImpl implements TagMetaService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<TagItem> getTagItems(User user, List<Long> itemIds, TagDefineType tagDefineType) {
|
public List<TagItem> getTagItems(List<Long> itemIds, TagDefineType tagDefineType) {
|
||||||
TagFilter tagFilter = new TagFilter();
|
TagFilter tagFilter = new TagFilter();
|
||||||
tagFilter.setTagDefineType(tagDefineType);
|
tagFilter.setTagDefineType(tagDefineType);
|
||||||
tagFilter.setItemIds(itemIds);
|
tagFilter.setItemIds(itemIds);
|
||||||
Set<Long> dimensionItemSet = getTagDOList(tagFilter, user).stream().map(TagDO::getItemId)
|
Set<Long> dimensionItemSet = getTagDOList(tagFilter).stream().map(TagDO::getItemId)
|
||||||
.collect(Collectors.toSet());
|
.collect(Collectors.toSet());
|
||||||
return itemIds.stream().map(entry -> {
|
return itemIds.stream().map(entry -> {
|
||||||
TagItem tagItem = new TagItem();
|
TagItem tagItem = new TagItem();
|
||||||
|
|||||||
@@ -0,0 +1,67 @@
|
|||||||
|
package com.tencent.supersonic.headless.server.service.impl;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
|
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.server.service.TermService;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class TermServiceImpl extends ServiceImpl<TermSetMapper, TermSetDO> implements TermService {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void saveOrUpdate(TermSetReq termSetReq, User user) {
|
||||||
|
QueryWrapper<TermSetDO> queryWrapper = new QueryWrapper<>();
|
||||||
|
queryWrapper.lambda().eq(TermSetDO::getDomainId, termSetReq.getDomainId());
|
||||||
|
TermSetDO termSetDO = getOne(queryWrapper);
|
||||||
|
if (termSetDO == null) {
|
||||||
|
termSetReq.createdBy(user.getName());
|
||||||
|
termSetDO = new TermSetDO();
|
||||||
|
}
|
||||||
|
termSetReq.updatedBy(user.getName());
|
||||||
|
BeanMapper.mapper(termSetReq, termSetDO);
|
||||||
|
termSetDO.setTerms(JsonUtil.toString(termSetReq.getTerms()));
|
||||||
|
saveOrUpdate(termSetDO);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TermSetResp getTermSet(Long domainId) {
|
||||||
|
QueryWrapper<TermSetDO> 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);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<Long, List<Term>> getTermSets(Set<Long> domainIds) {
|
||||||
|
QueryWrapper<TermSetDO> queryWrapper = new QueryWrapper<>();
|
||||||
|
queryWrapper.lambda().in(TermSetDO::getDomainId, domainIds);
|
||||||
|
List<TermSetDO> list = list(queryWrapper);
|
||||||
|
return list.stream().map(this::convert).collect(
|
||||||
|
Collectors.toMap(TermSetResp::getDomainId, TermSetResp::getTerms, (k1, k2) -> k1));
|
||||||
|
}
|
||||||
|
|
||||||
|
private TermSetResp convert(TermSetDO termSetDO) {
|
||||||
|
TermSetResp termSetResp = new TermSetResp();
|
||||||
|
BeanMapper.mapper(termSetDO, termSetResp);
|
||||||
|
termSetResp.setTerms(JsonUtil.toList(termSetDO.getTerms(), Term.class));
|
||||||
|
return termSetResp;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -294,3 +294,15 @@ update s2_metric set is_publish = 1;
|
|||||||
|
|
||||||
--20240402
|
--20240402
|
||||||
alter table s2_dimension add column `ext` varchar(1000) DEFAULT NULL;
|
alter table s2_dimension add column `ext` varchar(1000) DEFAULT NULL;
|
||||||
|
|
||||||
|
--20240510
|
||||||
|
CREATE TABLE IF NOT EXISTS `s2_term_set` (
|
||||||
|
`id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||||
|
`domain_id` bigint(20),
|
||||||
|
`terms` varchar(1000),
|
||||||
|
`created_at` datetime NOT NULL ,
|
||||||
|
`created_by` varchar(100) NOT NULL ,
|
||||||
|
`updated_at` datetime DEFAULT NULL ,
|
||||||
|
`updated_by` varchar(100) DEFAULT NULL ,
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
);
|
||||||
@@ -626,3 +626,15 @@ CREATE TABLE IF NOT EXISTS `s2_query_rule` (
|
|||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
);
|
);
|
||||||
COMMENT ON TABLE s2_query_rule IS 'tag query rule table';
|
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),
|
||||||
|
`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';
|
||||||
@@ -549,3 +549,14 @@ CREATE TABLE IF NOT EXISTS `s2_query_rule` (
|
|||||||
`ext` text DEFAULT NULL ,
|
`ext` text DEFAULT NULL ,
|
||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8 COMMENT ='查询规则表';
|
) ENGINE = InnoDB DEFAULT CHARSET = utf8 COMMENT ='查询规则表';
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS `s2_term_set` (
|
||||||
|
`id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||||
|
`domain_id` bigint(20),
|
||||||
|
`terms` varchar(1000),
|
||||||
|
`created_at` datetime NOT NULL ,
|
||||||
|
`created_by` varchar(100) NOT NULL ,
|
||||||
|
`updated_at` datetime DEFAULT NULL ,
|
||||||
|
`updated_by` varchar(100) DEFAULT NULL ,
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
);
|
||||||
@@ -626,3 +626,15 @@ CREATE TABLE IF NOT EXISTS `s2_query_rule` (
|
|||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
);
|
);
|
||||||
COMMENT ON TABLE s2_query_rule IS 'tag query rule table';
|
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),
|
||||||
|
`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';
|
||||||
Reference in New Issue
Block a user