فهرست منبع

另建一份分词的属性索引,用于属性值联想时不区分大小写

sunyj 9 سال پیش
والد
کامیت
cb50df8f3a

+ 4 - 0
search-console/src/main/java/com/uas/search/console/service/impl/IndexServiceImpl.java

@@ -330,6 +330,10 @@ public class IndexServiceImpl implements IndexService {
 			if (!StringUtils.isEmpty(propertyValue.getValue())) {
 				String fieldKey = SearchConstants.COMPONENT_PROPERTY_PREFIX + propertyValue.getPropertyid();
 				document.add(new StringField(fieldKey, propertyValue.getValue(), Store.YES));
+
+				// 另建一份分词的属性索引,用于属性值联想时不区分大小写
+				String fieldKeyTokenized = fieldKey + SearchConstants.COMPONENT_PROPERTY_TOKENIZED_SUFFIX;
+				document.add(new TextField(fieldKeyTokenized, propertyValue.getValue(), Store.YES));
 			}
 		}
 		return document;

+ 5 - 2
search-console/src/main/java/com/uas/search/console/service/impl/SearchServiceImpl.java

@@ -697,7 +697,8 @@ public class SearchServiceImpl implements SearchService {
 	}
 
 	@Override
-	public List<Map<String, String>> getSimilarPropertyValues(Long kindId, Long propertyId, String keyword, Long topNum) {
+	public List<Map<String, String>> getSimilarPropertyValues(Long kindId, Long propertyId, String keyword,
+			Long topNum) {
 		String message = "";
 		if (kindId == null || propertyId == null) {
 			message = "类目id或属性id为空";
@@ -716,6 +717,7 @@ public class SearchServiceImpl implements SearchService {
 		if (!propertyIdString.startsWith(SearchConstants.COMPONENT_PROPERTY_PREFIX)) {
 			propertyIdString = SearchConstants.COMPONENT_PROPERTY_PREFIX + propertyIdString;
 		}
+		propertyIdString = propertyIdString + SearchConstants.COMPONENT_PROPERTY_TOKENIZED_SUFFIX;
 		if (keyword == null) {
 			keyword = "";
 		}
@@ -729,7 +731,8 @@ public class SearchServiceImpl implements SearchService {
 			BooleanQuery booleanQuery = new BooleanQuery();
 			booleanQuery.add(new TermQuery(new Term(SearchConstants.COMPONENT_KINDID_FIELD, String.valueOf(kindId))),
 					BooleanClause.Occur.MUST);
-			booleanQuery.add(new PrefixQuery(new Term(propertyIdString, keyword)), BooleanClause.Occur.MUST);
+			booleanQuery.add(new PrefixQuery(new Term(propertyIdString, keyword.toLowerCase())),
+					BooleanClause.Occur.MUST);
 			logger.info(booleanQuery);
 			TopDocs topDocs = searcher.search(booleanQuery, TOP_NUM);
 			ScoreDoc[] scoreDocs = topDocs.scoreDocs;

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

@@ -85,5 +85,9 @@ public class SearchConstants {
 	 * 创建器件属性的索引时,在属性id的前面添加该前缀作为Field的键
 	 */
 	public static final String COMPONENT_PROPERTY_PREFIX = "pr_";
+	/**
+	 * 另外创建的经过分词的属性值,添加后缀作为Field的键
+	 */
+	public static final String COMPONENT_PROPERTY_TOKENIZED_SUFFIX = "_tokenized";
 
 }