Lucene大概分为三种排序实现方式
1、按照索引的顺序进行排序(Sort.INDEXORDER或SortField.FIELD_DOC)
2、按照关联性评分进行排序(Sort.RELEVANCE或SortField.FIELD_SCORE)
3、按照Field属性排序
代码实现
package com.jmj.project.web;
import java.io.IOException;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.Sort;
import org.apache.lucene.search.SortField;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.util.Version;
import org.wltea.analyzer.lucene.IKAnalyzer;
public class Snippet {
public String indexSearch(){
try {
Analyzer analyzer = new IKAnalyzer();
IndexSearcher isSearcher = null;
QueryParser qp = new QueryParser(Version.LUCENE_40, "query", analyzer);
Query query = qp.parse("关键词");
SortField sortField1 = new SortField("sortField1", SortField.Type.LONG, true);
SortField sortField2 = new SortField("sortField2", SortField.Type.LONG, false);
Sort sort = new Sort(new SortField[] { SortField.FIELD_SCORE, sortField1 });
Sort sort = new Sort(sortField1, sortField2);
//按照索引的顺序进行排序
TopDocs topDocs = isSearcher.search(query, 5000, Sort.INDEXORDER);
//按照关联性评分进行排序
TopDocs topDocs = isSearcher.search(query, 5000, Sort.RELEVANCE);
//按照Field属性查询
TopDocs topDocs = isSearcher.search(query, 5000, sort);
} catch (ParseException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
SortField需指定排序索引,索引类型,其中true代表降序,false代表升序
Sort排序可单维度或多维度排序,多维度排序可实现按关联性评分和字段索引排序
一般在项目中需要组合排序,可根据本文自行设计
本文深入探讨了Lucene的三种排序实现方式:索引顺序排序、关联性评分排序及Field属性排序,并提供了代码示例,展示了如何使用SortField和Sort类进行单维度或多维度排序。

675

被折叠的 条评论
为什么被折叠?



