Lucene实战(三)多Field搜索,并且对搜索结果进行过滤和[自定义]排序

本文介绍了如何使用Lucene进行多Field搜索,并对搜索结果进行过滤和自定义排序。通过示例展示了如何组合Query、使用Filter进行结果过滤,以及如何根据特定Field进行排序,同时探讨了自定义排序的内部流程和实现方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Lucene几乎可以应用于任何具有全文检索需求的地方。例如:电子商务网站。

我们需要解析用户的输入,根据输入定位到相关产品(1)

然后我们列出该类型产品的具体参数,让用户根据参数去进一步缩小自己的选择范围(2)

检索期间,用户可以勾选“只显示有货产品”这一选项来过滤出那些有货的商品(3)

当然,商品是需要进行排序显示的(4)

上面的需求中,(1)(2)可以通过多域查询(或者是多个Query组成BooleanQuery,当然,也可以用Filter)实现。

(3)的意思是已有的检索结果进行过滤,这也是我今天要说得org.apache.lucene.search.Filter及其用法

对于需求(4)Lucene为我们提供了两类控制排序的方式:

  • 预定义方式
    • 根据文档评分排序
    • 根据某Field值排序
    • 。。。
  • 自定义方式

(零)项目环境

这里是我的商品bean:

是的,这个项目我还集成了SSH,如果你有兴趣看到这个系列的最后,你也可以轻松地构建一个实用的全文检索模块加入到你的应用里。

我按照这样的格式将他们索引到了indexPath下:

public List<Goods> addIndex(List<Goods> goods) {
		List<Goods> list = new ArrayList<Goods>();
		boolean rs;
		for (int i = 0; i < goods.size(); i++) {
			rs = true;
			Goods g = goods.get(i);
			Document doc = new Document();
			doc.add(new Field("id", g.getId(), Store.YES, Index.NOT_ANALYZED));
			doc.add(new Field("name", g.getNa
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值