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