Przeglądaj źródła

增加接口:获取末级类目联想词;获取指定级别类目联想词

sunyj 9 lat temu
rodzic
commit
294eb66814

+ 18 - 1
search-api/src/main/java/com/uas/search/service/SearchService.java

@@ -121,10 +121,27 @@ public interface SearchService {
 	 * 根据输入的类目名获取联想词
 	 * 
 	 * @param kindName
-	 * @return 包括id、nameCn
+	 * @return 包括id、nameCn、level、isLeaf
 	 */
 	public List<Map<String, Object>> getSimilarKinds(String kindName);
 
+	/**
+	 * 根据输入的类目名获取末级类目联想词
+	 * 
+	 * @param kindName
+	 * @return 包括id、nameCn、level、isLeaf
+	 */
+	public List<Map<String, Object>> getSimilarLeafKinds(String kindName);
+
+	/**
+	 * 根据输入的类目名和指定的类目级别获取联想词
+	 * 
+	 * @param kindName
+	 * @param level
+	 * @return 包括id、nameCn、level、isLeaf
+	 */
+	public List<Map<String, Object>> getSimilarKindsByLevel(String kindName, Short level);
+
 	/**
 	 * 根据类目id、属性id、属性值获取联想词
 	 * 

+ 12 - 0
search-console/src/main/java/com/uas/search/console/controller/SearchController.java

@@ -132,7 +132,19 @@ public class SearchController {
 	public List<Map<String, Object>> getSimilarKinds(String kindName) {
 		return searchService.getSimilarKinds(kindName);
 	}
+	
+	@RequestMapping("/similarLeafKinds")
+	@ResponseBody
+	public List<Map<String, Object>> getSimilarLeafKinds(String kindName){
+		return searchService.getSimilarLeafKinds(kindName);
+	}
 
+	@RequestMapping("/similarKindsByLevel")
+	@ResponseBody
+	public List<Map<String, Object>> getSimilarKindsByLevel(String kindName, Short level){
+		return searchService.getSimilarKindsByLevel(kindName, level);
+	}
+	
 	@RequestMapping("/similarPropertyValues")
 	@ResponseBody
 	public List<String> getSimilarPropertyValues(Long kindId, Long propertyId, String keyword, Long topNum) {

+ 30 - 1
search-console/src/main/java/com/uas/search/console/model/KindSimpleInfo.java

@@ -35,6 +35,18 @@ public class KindSimpleInfo implements Serializable {
 	@Column(name = "ki_name")
 	private String nameCn;
 
+	/**
+	 * 类目的层级,从1开始,1、2、3
+	 */
+	@Column(name = "ki_level")
+	private Short level;
+
+	/**
+	 * 是否为叶子类目 1是 0否
+	 */
+	@Column(name = "ki_isleaf")
+	private Short isLeaf;
+
 	public Long getId() {
 		return id;
 	}
@@ -51,8 +63,25 @@ public class KindSimpleInfo implements Serializable {
 		this.nameCn = nameCn;
 	}
 
+	public Short getLevel() {
+		return level;
+	}
+
+	public void setLevel(Short level) {
+		this.level = level;
+	}
+
+	public Short getIsLeaf() {
+		return isLeaf;
+	}
+
+	public void setIsLeaf(Short isLeaf) {
+		this.isLeaf = isLeaf;
+	}
+
 	@Override
 	public String toString() {
-		return "KindSimpleInfo [id=" + id + ", nameCn=" + nameCn + "]";
+		return "KindSimpleInfo [id=" + id + ", nameCn=" + nameCn + ", level=" + level + ", isLeaf=" + isLeaf + "]";
 	}
+
 }

+ 10 - 8
search-console/src/main/java/com/uas/search/console/service/impl/IndexServiceImpl.java

@@ -262,14 +262,17 @@ public class IndexServiceImpl implements IndexService {
 	 * @return
 	 */
 	private Document toDocument(KindSimpleInfo kind) {
+		if (kind == null || kind.getId() == null || StringUtils.isEmpty(kind.getNameCn()) || kind.getIsLeaf() == null
+				|| kind.getLevel() == null) {
+			return null;
+		}
 		Document document = new Document();
 		// 不能用LongField,否则后续实时更新索引时,方法updateDocument(new Term("", ""),
 		// doc)无法根据id进行更新
-		if (kind == null || kind.getId() == null || StringUtils.isEmpty(kind.getNameCn())) {
-			return null;
-		}
 		document.add(new StringField(SearchConstants.KIND_ID_FIELD, String.valueOf(kind.getId()), Store.YES));
 		document.add(new TextField(SearchConstants.KIND_NAMECN_FIELD, kind.getNameCn(), Store.YES));
+		document.add(new StringField(SearchConstants.KIND_ISLEAF_FIELD, String.valueOf(kind.getIsLeaf()), Store.YES));
+		document.add(new StringField(SearchConstants.KIND_LEVEL_FIELD, String.valueOf(kind.getLevel()), Store.YES));
 		return document;
 	}
 
@@ -280,12 +283,11 @@ public class IndexServiceImpl implements IndexService {
 	 * @return
 	 */
 	private Document toDocument(BrandSimpleInfo brand) {
-		Document document = new Document();
 		if (brand == null || brand.getId() == null || StringUtils.isEmpty(brand.getNameCn())
 				|| StringUtils.isEmpty(brand.getUuid())) {
 			return null;
 		}
-		// 不用LongField,否则后续实时更新索引时无法根据id进行更新
+		Document document = new Document();
 		document.add(new StringField(SearchConstants.BRAND_ID_FIELD, String.valueOf(brand.getId()), Store.YES));
 		String nameCn = brand.getNameCn();
 		if (!StringUtils.isEmpty(nameCn)) {
@@ -306,12 +308,12 @@ public class IndexServiceImpl implements IndexService {
 	 * @return
 	 */
 	private Document toDocument(ComponentSimpleInfo component) {
-		if (component == null || component.getId() == null || StringUtils.isEmpty(component.getUuid()) || StringUtils.isEmpty(component.getCode())
-				|| component.getKindid() == null || component.getBrandid() == null) {
+		if (component == null || component.getId() == null || StringUtils.isEmpty(component.getUuid())
+				|| StringUtils.isEmpty(component.getCode()) || component.getKindid() == null
+				|| component.getBrandid() == null) {
 			return null;
 		}
 		Document document = new Document();
-		// 不用LongField
 		document.add(new StringField(SearchConstants.COMPONENT_ID_FIELD, String.valueOf(component.getId()), Store.YES));
 		document.add(new StringField(SearchConstants.COMPONENT_UUID_FIELD, component.getUuid(), Store.YES));
 		// 转小写,以避免分词,又不会因大小写影响搜索

+ 39 - 1
search-console/src/main/java/com/uas/search/console/service/impl/SearchServiceImpl.java

@@ -623,6 +623,31 @@ public class SearchServiceImpl implements SearchService {
 
 	@Override
 	public List<Map<String, Object>> getSimilarKinds(String kindName) {
+		return getSimilarKinds(kindName, null, null);
+	}
+
+	@Override
+	public List<Map<String, Object>> getSimilarLeafKinds(String kindName) {
+		return getSimilarKinds(kindName, (short) 1, null);
+	}
+
+	@Override
+	public List<Map<String, Object>> getSimilarKindsByLevel(String kindName, Short level) {
+		return getSimilarKinds(kindName, null, level);
+	}
+
+	/**
+	 * 根据输入的类目名获取联想词
+	 * 
+	 * @param kindName
+	 *            类目名
+	 * @param isLeaf
+	 *            是否只获取末级类目
+	 * @param level
+	 *            指定的类目级别
+	 * @return
+	 */
+	private List<Map<String, Object>> getSimilarKinds(String kindName, Short isLeaf, Short level) {
 		String message = "";
 		if (isKeywordInvalid(kindName)) {
 			message = "输入无效:" + kindName;
@@ -639,7 +664,18 @@ public class SearchServiceImpl implements SearchService {
 
 		List<Map<String, Object>> kinds = new ArrayList<>();
 		try {
-			BooleanQuery booleanQuery = getBooleanQuery(SearchConstants.KIND_NAMECN_FIELD, kindName);
+			BooleanQuery booleanQuery = new BooleanQuery();
+			booleanQuery.add(getBooleanQuery(SearchConstants.KIND_NAMECN_FIELD, kindName), BooleanClause.Occur.MUST);
+
+			if (isLeaf != null && isLeaf == 1) {
+				booleanQuery.add(new TermQuery(new Term(SearchConstants.KIND_ISLEAF_FIELD, String.valueOf(isLeaf))),
+						BooleanClause.Occur.MUST);
+			} else {
+				if (level != null && level > 0) {
+					booleanQuery.add(new TermQuery(new Term(SearchConstants.KIND_LEVEL_FIELD, String.valueOf(level))),
+							BooleanClause.Occur.MUST);
+				}
+			}
 			logger.info(booleanQuery);
 			TopDocs hits = searcher.search(booleanQuery, SIMILAR_NUM);
 			ScoreDoc[] scoreDocs = hits.scoreDocs;
@@ -648,6 +684,8 @@ public class SearchServiceImpl implements SearchService {
 				Map<String, Object> map = new HashMap<>();
 				map.put("id", Long.parseLong(document.get(SearchConstants.KIND_ID_FIELD)));
 				map.put("nameCn", document.get(SearchConstants.KIND_NAMECN_FIELD));
+				map.put("isLeaf", Short.parseShort(document.get(SearchConstants.KIND_ISLEAF_FIELD)));
+				map.put("level", Short.parseShort(document.get(SearchConstants.KIND_LEVEL_FIELD)));
 				kinds.add(map);
 			}
 		} catch (IOException e) {

+ 2 - 0
search-console/src/main/java/com/uas/search/console/util/SearchConstants.java

@@ -63,6 +63,8 @@ public class SearchConstants {
 	 */
 	public static final String KIND_ID_FIELD = "ki_id";
 	public static final String KIND_NAMECN_FIELD = "ki_name_cn";
+	public static final String KIND_LEVEL_FIELD = "ki_level";
+	public static final String KIND_ISLEAF_FIELD = "ki_isleaf";
 
 	public static final String BRAND_ID_FIELD = "br_id";
 	public static final String BRAND_NAMECN_FIELD = "br_name_cn";