sunyj пре 9 година
родитељ
комит
6d11aa8b7c

+ 19 - 7
search-api/src/main/java/com/uas/search/service/SearchService.java

@@ -7,7 +7,7 @@ import java.util.Set;
 import com.uas.search.model.PageParams;
 
 /**
- * 搜索服的接口
+ * 搜索服的接口
  * 
  * @author suntg
  * @since 2016年7月29日下午4:58:45
@@ -52,8 +52,8 @@ public interface SearchService {
 	 * 根据关键词搜索产品
 	 * 
 	 * @param keyword
-	 *            关键词
-	 * @return 符合条件的产品id
+	 * @param params(可选,默认第1页的20条)
+	 * @return
 	 */
 	public Map<String, Object> getComponentIds(String keyword, PageParams params);
 
@@ -61,6 +61,7 @@ public interface SearchService {
 	 * 根据产品搜索获取产品类目id的统计
 	 * 
 	 * @param keyword
+	 * @param brandId(可选)
 	 * @return
 	 */
 	public Set<Long> getKindIdsBySearchComponent(String keyword, String brandId);
@@ -69,7 +70,7 @@ public interface SearchService {
 	 * 根据产品搜索获取产品类目的统计
 	 * 
 	 * @param keyword
-	 * @param brandId
+	 * @param brandId(可选)
 	 * @return
 	 */
 	public List<Map<String, Object>> getKindsBySearchComponent(String keyword, String brandId);
@@ -78,6 +79,7 @@ public interface SearchService {
 	 * 根据产品搜索获取产品品牌id的统计
 	 * 
 	 * @param keyword
+	 * @param kindId(可选)
 	 * @return
 	 */
 	public Set<Long> getBrandIdsBySearchComponent(String keyword, String kindId);
@@ -86,7 +88,7 @@ public interface SearchService {
 	 * 根据产品搜索获取产品品牌的统计
 	 * 
 	 * @param keyword
-	 * @param kindId
+	 * @param kindId(可选)
 	 * @return
 	 */
 	public List<Map<String, Object>> getBrandsBySearchComponent(String keyword, String kindId);
@@ -115,14 +117,24 @@ public interface SearchService {
 	 */
 	public List<Map<String, Object>> getSimilarBrands(String brandName);
 
+	/**
+	 * 根据输入的类目名获取联想词
+	 * 
+	 * @param kindName
+	 * @return 包括id、nameCn
+	 */
+	public List<Map<String, Object>> getSimilarKinds(String kindName);
+
 	/**
 	 * 根据类目id、属性id、属性值获取联想词
 	 * 
 	 * @param kindId
+	 *            类目id
 	 * @param propertyId
-	 * @param keyword
+	 *            属性id
+	 * @param keyword(可选)
 	 *            属性值(部分字符)
-	 * @param topNum
+	 * @param topNum(可选)
 	 *            获取的最大数目
 	 * @return 相似的属性值
 	 */

+ 6 - 93
search-console/src/main/java/com/uas/search/console/controller/SearchController.java

@@ -30,72 +30,36 @@ public class SearchController {
 	@Autowired
 	private SearchService searchService;
 
-	/**
-	 * 搜索产品类目
-	 * 
-	 * @param keyword
-	 * @return
-	 */
 	@RequestMapping("/kindIds")
 	@ResponseBody
 	public List<Long> seachKindIds(String keyword) {
 		return searchService.getKindIds(keyword);
 	}
 
-	/**
-	 * 搜索产品类目
-	 * 
-	 * @param keyword
-	 * @return
-	 */
 	@RequestMapping("/kinds")
 	@ResponseBody
 	public List<Map<String, Object>> seachKinds(String keyword) {
 		return searchService.getKinds(keyword);
 	}
 
-	/**
-	 * 搜索产品品牌id
-	 * 
-	 * @param keyword
-	 * @return
-	 */
 	@RequestMapping("/brandIds")
 	@ResponseBody
 	public List<Long> searchBrandIds(String keyword) {
 		return searchService.getBrandIds(keyword);
 	}
 
-	/**
-	 * 搜索产品品牌
-	 * 
-	 * @param keyword
-	 * @return
-	 */
 	@RequestMapping("/brands")
 	@ResponseBody
 	public List<Map<String, Object>> searchBrand(String keyword) {
 		return searchService.getBrands(keyword);
 	}
 
-	/**
-	 * 搜索产品id
-	 * 
-	 * @param keyword
-	 * @return
-	 */
 	@RequestMapping("/componentIds")
 	@ResponseBody
 	public Map<String, Object> searchComponentIds(String keyword) {
 		return searchService.getComponentIds(keyword, new PageParams());
 	}
 
-	/**
-	 * 搜索产品
-	 * 
-	 * @param keyword
-	 * @return
-	 */
 	@Autowired
 	private ComponentSimpleInfoDao componentDao;
 
@@ -121,105 +85,54 @@ public class SearchController {
 		return componentDao.findByIdsInOrder(idsLong);
 	}
 
-	/**
-	 * 统计器件的类目id
-	 * 
-	 * @param keyword
-	 * @param brandId
-	 * @return
-	 */
 	@RequestMapping("/kindIdsByComponent")
 	@ResponseBody
 	public Set<Long> searchKindIdsBySearchComponent(String keyword, String brandId) {
 		return searchService.getKindIdsBySearchComponent(keyword, brandId);
 	}
 
-	/**
-	 * 统计器件的类目
-	 * 
-	 * @param keyword
-	 * @param brandId
-	 * @return
-	 */
 	@RequestMapping("/kindsByComponent")
 	@ResponseBody
 	public List<Map<String, Object>> searchKindsBySearchComponent(String keyword, String brandId) {
 		return searchService.getKindsBySearchComponent(keyword, brandId);
 	}
 
-	/**
-	 * 统计器件的品牌id
-	 * 
-	 * @param keyword
-	 * @param brandId
-	 * @return
-	 */
 	@RequestMapping("/brandIdsByComponent")
 	@ResponseBody
 	public Set<Long> searchBrandIdsBySearchComponent(String keyword, String kindId) {
 		return searchService.getBrandIdsBySearchComponent(keyword, kindId);
 	}
 
-	/**
-	 * 统计器件的品牌
-	 * 
-	 * @param keyword
-	 * @param brandId
-	 * @return
-	 */
 	@RequestMapping("/brandsByComponent")
 	@ResponseBody
 	public List<Map<String, Object>> searchBrandsBySearchComponent(String keyword, String kindId) {
 		return searchService.getBrandsBySearchComponent(keyword, kindId);
 	}
 
-	/**
-	 * 联想词
-	 * 
-	 * @param keyword
-	 * @return
-	 */
 	@RequestMapping("/similarKeywords")
 	@ResponseBody
 	public List<String> getSimilarKeywords(String keyword) {
 		return searchService.getSimilarKeywords(keyword);
 	}
 
-	/**
-	 * 器件原厂型号联想词
-	 * 
-	 * @param componentCode
-	 * @return
-	 */
 	@RequestMapping("/similarComponents")
 	@ResponseBody
 	public List<Map<String, Object>> getSimilarComponents(String componentCode) {
 		return searchService.getSimilarComponents(componentCode);
 	}
 
-	/**
-	 * 品牌联想词
-	 * 
-	 * @param componentCode
-	 * @return
-	 */
 	@RequestMapping("/similarBrands")
 	@ResponseBody
 	public List<Map<String, Object>> getSimilarBrands(String brandName) {
 		return searchService.getSimilarBrands(brandName);
 	}
 
-	/**
-	 * 根据类目id、属性id、属性值获取联想词
-	 * 
-	 * @param kindId
-	 * @param propertyId
-	 * @param keyword
-	 *            属性值(部分字符)
-	 * @param topNum
-	 *            获取的最大数目
-	 * @return 相似的属性值
-	 */
+	@RequestMapping("/similarKinds")
+	@ResponseBody
+	public List<Map<String, Object>> getSimilarKinds(String kindName) {
+		return searchService.getSimilarKinds(kindName);
+	}
+
 	@RequestMapping("/similarPropertyValues")
 	@ResponseBody
 	public List<String> getSimilarPropertyValues(Long kindId, Long propertyId, String keyword, Long topNum) {

+ 40 - 3
search-console/src/main/java/com/uas/search/console/service/impl/SearchServiceImpl.java

@@ -544,7 +544,7 @@ public class SearchServiceImpl implements SearchService {
 			throw new SystemError(message);
 		}
 
-		List<Map<String, Object>> result = new ArrayList<>();
+		List<Map<String, Object>> components = new ArrayList<>();
 		try {
 			BooleanQuery booleanQuery = getBooleanQuery(SearchConstants.COMPONENT_CODE_FIELD, componentCode);
 			logger.info(booleanQuery);
@@ -560,14 +560,14 @@ public class SearchServiceImpl implements SearchService {
 				map.put("id", Long.parseLong(document.get(SearchConstants.COMPONENT_ID_FIELD)));
 				map.put("uuid", document.get(SearchConstants.COMPONENT_UUID_FIELD));
 				map.put("code", document.get(SearchConstants.COMPONENT_CODE_FIELD));
-				result.add(map);
+				components.add(map);
 			}
 		} catch (IOException e) {
 			e.printStackTrace();
 		} finally {
 			searcherManager.release(searcher);
 		}
-		return result;
+		return components;
 	}
 
 	@Override
@@ -621,6 +621,43 @@ public class SearchServiceImpl implements SearchService {
 		return brands;
 	}
 
+	@Override
+	public List<Map<String, Object>> getSimilarKinds(String kindName) {
+		String message = "";
+		if (isKeywordInvalid(kindName)) {
+			message = "输入无效:" + kindName;
+			logger.error(message);
+			throw new SystemError(message);
+		}
+		searcherManager.maybeReopen();
+		IndexSearcher searcher = searcherManager.get();
+		if (searcher == null) {
+			message = "获取索引文件失败";
+			logger.error(message);
+			throw new SystemError(message);
+		}
+
+		List<Map<String, Object>> kinds = new ArrayList<>();
+		try {
+			BooleanQuery booleanQuery = getBooleanQuery(SearchConstants.KIND_NAMECN_FIELD, kindName);
+			logger.info(booleanQuery);
+			TopDocs hits = searcher.search(booleanQuery, SIMILAR_NUM);
+			ScoreDoc[] scoreDocs = hits.scoreDocs;
+			for (ScoreDoc scoreDoc : scoreDocs) {
+				Document document = searcher.doc(scoreDoc.doc);
+				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));
+				kinds.add(map);
+			}
+		} catch (IOException e) {
+			e.printStackTrace();
+		} finally {
+			searcherManager.release(searcher);
+		}
+		return kinds;
+	}
+
 	@Override
 	public List<String> getSimilarPropertyValues(Long kindId, Long propertyId, String keyword, Long topNum) {
 		String message = "";