Lucene之索引排序

本文深入探讨了Lucene的三种排序实现方式:索引顺序排序、关联性评分排序及Field属性排序,并提供了代码示例,展示了如何使用SortField和Sort类进行单维度或多维度排序。

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排序可单维度或多维度排序,多维度排序可实现按关联性评分和字段索引排序
一般在项目中需要组合排序,可根据本文自行设计

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值