|
|
@@ -70,6 +70,11 @@ public class SearchServiceImpl implements SearchService {
|
|
|
*/
|
|
|
private static final int SIMILAR_NUM = 20;
|
|
|
|
|
|
+ /**
|
|
|
+ * 获取联想词时返回的最大数目
|
|
|
+ */
|
|
|
+ private static final int SIMILAR_NUM_EIGHT = 8;
|
|
|
+
|
|
|
/**
|
|
|
* 所有物料
|
|
|
*/
|
|
|
@@ -1656,6 +1661,86 @@ public class SearchServiceImpl implements SearchService {
|
|
|
SearchUtils.getDocumentById(SearchConstants.PRODUCTS_PRIVATE_TABLE_NAME, SearchConstants.PRODUCT_PRIVATE_ID_FIELD, id));
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 获取标准型号联想词
|
|
|
+ *
|
|
|
+ * @param keyword 关键词
|
|
|
+ * @param size 尺寸
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public List<Map<String, Object>> getSimilarPCmpCodes(String keyword, Integer size) {
|
|
|
+ size = size == null || size < 1 ? SIMILAR_NUM_EIGHT : size;
|
|
|
+ if (SearchUtils.isKeywordInvalid(keyword)) {
|
|
|
+ throw new IllegalArgumentException("输入无效:" + keyword);
|
|
|
+ }
|
|
|
+ IndexSearcher indexSearcher = SearchUtils.getIndexSearcher(SearchConstants.PRODUCTS_PRIVATE_TABLE_NAME);
|
|
|
+
|
|
|
+ List<Map<String, Object>> products = new ArrayList<>();
|
|
|
+ try {
|
|
|
+ PrefixQuery prefixQuery = new PrefixQuery(
|
|
|
+ new Term(SearchConstants.PRODUCT_PRIVATE_PCMPCODE_FIELD, keyword.toLowerCase()));
|
|
|
+ logger.info(prefixQuery.toString());
|
|
|
+
|
|
|
+ Sort sort = new Sort(new SortField(SearchConstants.PRODUCT_PRIVATE_PCMPCODE_FIELD, new StringFieldComparatorSource(keyword)));
|
|
|
+ TopDocs hits = indexSearcher.search(prefixQuery, size, sort);
|
|
|
+ ScoreDoc[] scoreDocs = hits.scoreDocs;
|
|
|
+ for (ScoreDoc scoreDoc : scoreDocs) {
|
|
|
+ Set<String> fieldsToLoad = new HashSet<>();
|
|
|
+ fieldsToLoad.add(SearchConstants.PRODUCT_PRIVATE_PCMPCODE_FIELD);
|
|
|
+ Document document = indexSearcher.doc(scoreDoc.doc, fieldsToLoad);
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ map.put("pCmpCode", document.get(SearchConstants.PRODUCT_PRIVATE_PCMPCODE_FIELD));
|
|
|
+ products.add(map);
|
|
|
+ }
|
|
|
+ } catch (IOException e) {
|
|
|
+ logger.error("", e);
|
|
|
+ } finally {
|
|
|
+ SearchUtils.releaseIndexSearcher(indexSearcher);
|
|
|
+ }
|
|
|
+ return products;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取类目联想词
|
|
|
+ *
|
|
|
+ * @param keyword 关键词
|
|
|
+ * @param size 尺寸
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public List<Map<String, Object>> getSimilarKind(String keyword, Integer size) {
|
|
|
+ size = size == null || size < 1 ? SIMILAR_NUM_EIGHT : size;
|
|
|
+ if (SearchUtils.isKeywordInvalid(keyword)) {
|
|
|
+ throw new IllegalArgumentException("输入无效:" + keyword);
|
|
|
+ }
|
|
|
+ IndexSearcher indexSearcher = SearchUtils.getIndexSearcher(SearchConstants.PRODUCTS_PRIVATE_TABLE_NAME);
|
|
|
+
|
|
|
+ List<Map<String, Object>> products = new ArrayList<>();
|
|
|
+ try {
|
|
|
+ PrefixQuery prefixQuery = new PrefixQuery(
|
|
|
+ new Term(SearchConstants.PRODUCT_PRIVATE_KIND_FIELD, keyword.toLowerCase()));
|
|
|
+ logger.info(prefixQuery.toString());
|
|
|
+
|
|
|
+ Sort sort = new Sort(new SortField(SearchConstants.PRODUCT_PRIVATE_KIND_FIELD, new StringFieldComparatorSource(keyword)));
|
|
|
+ TopDocs hits = indexSearcher.search(prefixQuery, size, sort);
|
|
|
+ ScoreDoc[] scoreDocs = hits.scoreDocs;
|
|
|
+ for (ScoreDoc scoreDoc : scoreDocs) {
|
|
|
+ Set<String> fieldsToLoad = new HashSet<>();
|
|
|
+ fieldsToLoad.add(SearchConstants.PRODUCT_PRIVATE_KIND_FIELD);
|
|
|
+ Document document = indexSearcher.doc(scoreDoc.doc, fieldsToLoad);
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ map.put("kind", document.get(SearchConstants.PRODUCT_PRIVATE_KIND_FIELD));
|
|
|
+ products.add(map);
|
|
|
+ }
|
|
|
+ } catch (IOException e) {
|
|
|
+ logger.error("", e);
|
|
|
+ } finally {
|
|
|
+ SearchUtils.releaseIndexSearcher(indexSearcher);
|
|
|
+ }
|
|
|
+ return products;
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public Kind getKind(Long id) throws IOException {
|
|
|
return DocumentToObjectUtils.toKind(
|