Browse Source

sort kind using StringFieldComparatorSource

sunyj 8 years ago
parent
commit
126d0057e9

+ 1 - 0
mall-search/src/main/java/com/uas/search/constant/SearchConstants.java

@@ -66,6 +66,7 @@ public class SearchConstants {
 	// 类目索引字段的key
 	public static final String KIND_ID_FIELD = "ki_id";
 	public static final String KIND_NAMECN_FIELD = "ki_name_cn";
+    public static final String KIND_NAMECN_UNTOKENIZED_FIELD = "ki_name_cn_untokenized";
 	public static final String KIND_LEVEL_FIELD = "ki_level";
 	public static final String KIND_ISLEAF_FIELD = "ki_isleaf";
     public static final String KIND_VISIT_COUNT_FIELD = "ki_visit_count";

+ 5 - 4
mall-search/src/main/java/com/uas/search/service/impl/SearchServiceImpl.java

@@ -84,18 +84,19 @@ public class SearchServiceImpl implements SearchService {
 		}
 		BooleanQuery booleanQuery = SearchUtils.getBooleanQuery(SearchConstants.KIND_NAMECN_FIELD, keyword);
 		logger.info(booleanQuery.toString());
-		return SearchUtils.getDocuments(SearchConstants.KIND_TABLE_NAME, booleanQuery, new Sort(sortKind()), page, size);
+		return SearchUtils.getDocuments(SearchConstants.KIND_TABLE_NAME, booleanQuery, new Sort(sortKind(keyword)), page, size);
 	}
 
     /**
      * @return 类目排序规则
      */
-    private SortField[] sortKind() {
+    private SortField[] sortKind(String keyword) {
         // 分数 > 访问量 > 搜索次数
         return new SortField[]{
-                SortField.FIELD_SCORE,
+				new SortField(SearchConstants.KIND_NAMECN_UNTOKENIZED_FIELD, new StringFieldComparatorSource(keyword)),
                 sortField(SearchConstants.KIND_VISIT_COUNT_FIELD, Type.LONG, true, Long.MIN_VALUE),
-                sortField(SearchConstants.KIND_SEARCH_COUNT_FIELD, Type.LONG, true, Long.MIN_VALUE)
+                sortField(SearchConstants.KIND_SEARCH_COUNT_FIELD, Type.LONG, true, Long.MIN_VALUE),
+				SortField.FIELD_SCORE
         };
     }
 

+ 2 - 0
mall-search/src/main/java/com/uas/search/util/ObjectToDocumentUtils.java

@@ -70,6 +70,8 @@ public class ObjectToDocumentUtils {
 		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 BinaryDocValuesField(SearchConstants.KIND_NAMECN_FIELD, new BytesRef(kind.getNameCn())));
+        document.add(new StringField(SearchConstants.KIND_NAMECN_UNTOKENIZED_FIELD, kind.getNameCn().toLowerCase(), Store.YES));
+        document.add(new BinaryDocValuesField(SearchConstants.KIND_NAMECN_UNTOKENIZED_FIELD, new BytesRef(kind.getNameCn())));
 		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));
         if (kind.getVisitCount() != null) {