|
|
@@ -695,7 +695,7 @@ public class SearchServiceImpl implements SearchService {
|
|
|
*/
|
|
|
private List<String> getSimilarComponentCodes(String componentCode, Integer size) {
|
|
|
return getSimilarValues(SearchConstants.COMPONENT_TABLE_NAME, SearchConstants.COMPONENT_CODE_FIELD,
|
|
|
- SearchConstants.COMPONENT_CODE_FIELD, componentCode.toLowerCase(), size);
|
|
|
+ SearchConstants.COMPONENT_CODE_FIELD, componentCode.toLowerCase(), size, true);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -708,7 +708,7 @@ public class SearchServiceImpl implements SearchService {
|
|
|
private List<String> getSimilarBrandNames(String brandName, Integer size) {
|
|
|
// 获取相似的中文品牌
|
|
|
List<String> nameCns = getSimilarValues(SearchConstants.BRAND_TABLE_NAME, SearchConstants.BRAND_NAMECN_FIELD,
|
|
|
- SearchConstants.BRAND_NAMECN_UNTOKENIZED_FIELD, brandName, size);
|
|
|
+ SearchConstants.BRAND_NAMECN_UNTOKENIZED_FIELD, brandName, size, false);
|
|
|
// 相似的中文品牌数量足够,直接返回
|
|
|
if (nameCns != null && nameCns.size() == SIMILAR_NUM) {
|
|
|
return nameCns;
|
|
|
@@ -717,7 +717,7 @@ public class SearchServiceImpl implements SearchService {
|
|
|
List<String> names = nameCns;
|
|
|
// 获取相似的英文品牌
|
|
|
List<String> nameEns = getSimilarValues(SearchConstants.BRAND_TABLE_NAME, SearchConstants.BRAND_NAMEEN_FIELD,
|
|
|
- SearchConstants.BRAND_NAMEEN_UNTOKENIZED_FIELD, brandName, size);
|
|
|
+ SearchConstants.BRAND_NAMEEN_UNTOKENIZED_FIELD, brandName, size, false);
|
|
|
names.addAll(nameEns);
|
|
|
return names;
|
|
|
}
|
|
|
@@ -731,19 +731,21 @@ public class SearchServiceImpl implements SearchService {
|
|
|
*/
|
|
|
private List<String> getSimilarKindNames(String kindName, Integer size) {
|
|
|
return getSimilarValues(SearchConstants.KIND_TABLE_NAME, SearchConstants.KIND_NAMECN_FIELD,
|
|
|
- SearchConstants.KIND_NAMECN_UNTOKENIZED_FIELD, kindName, size);
|
|
|
+ SearchConstants.KIND_NAMECN_UNTOKENIZED_FIELD, kindName, size, false);
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 根据输入值获取该域相似的值
|
|
|
- *
|
|
|
- * @param tableName
|
|
|
- * @param field
|
|
|
- * @param keyword
|
|
|
- * @param size 指定的联想词数目
|
|
|
- * @return
|
|
|
- */
|
|
|
- private List<String> getSimilarValues(String tableName, String field, String sortField, String keyword, Integer size) {
|
|
|
+ /**
|
|
|
+ * 根据输入值获取该域相似的值
|
|
|
+ *
|
|
|
+ * @param tableName 表名
|
|
|
+ * @param field 联想字段
|
|
|
+ * @param sortField 排序字段
|
|
|
+ * @param keyword 关键词
|
|
|
+ * @param size 联想词数目
|
|
|
+ * @param usePrefixQuery 是否使用 PrefixQuery
|
|
|
+ * @return 联想词
|
|
|
+ */
|
|
|
+ private List<String> getSimilarValues(String tableName, String field, String sortField, String keyword, Integer size, boolean usePrefixQuery) {
|
|
|
if (SearchUtils.isKeywordInvalid(keyword)) {
|
|
|
throw new SearchException("输入无效:" + keyword);
|
|
|
}
|
|
|
@@ -751,7 +753,12 @@ public class SearchServiceImpl implements SearchService {
|
|
|
|
|
|
List<String> result = new ArrayList<>();
|
|
|
try {
|
|
|
- Query query = SearchUtils.getBooleanQuery(field, keyword);
|
|
|
+ Query query;
|
|
|
+ if(usePrefixQuery){
|
|
|
+ query = new PrefixQuery(new Term(field, keyword.toLowerCase()));
|
|
|
+ }else{
|
|
|
+ query = SearchUtils.getBooleanQuery(field, keyword);
|
|
|
+ }
|
|
|
logger.info(query.toString());
|
|
|
Sort sort = new Sort(new SortField(sortField, new StringFieldComparatorSource(keyword)));
|
|
|
TopDocs hits = indexSearcher.search(query, size, sort);
|