lucene 检索做到输入一个 “甲” 将甲相关的都检索出来 并且如果 有 “甲" 这个字段 那他排到最前

我的索引有三个字段

Doc1---
名称:甲苯
别名:无水甲苯;甲基苯
编号:534-07-6

Doc2---
名称:甲苯-2,4-二异氰酸酯
别名:2,4-TDI;2,4-二异氰酸甲苯酯;甲苯-2,4-二异氰酸酯;甲苯基-2,4-二异氰酸酯;2,4-二异氰

  酸酯甲苯;甲苯 2,4-二异氰酸酯 

编号:584-84-9

就比如这两个字段,我搜“甲苯” 条件是这三个字段都检索,那么lucene 的排序是按照检索得分来排,那么Doc2得分最多因为出现 ‘甲苯’ 最多所以排在最前,但关键词是甲苯 ,客户希望找的就是甲苯 Doc1 问题就是如何让最相似的排在最前。

阅读 3.3k
3 个回答
新手上路,请多包涵

我用solr。
1,可以给不同域设置不同的域激励因子,从而降低因为次要域出现过多关键字过分影响结果。
2,可以通过(关键字出现次数/该域包含单词数)来提高doc1的排序。 具体操作你再查查。

你可以在搜索的时候,利用lucene自带的通配符匹配搜索,搜索结果排序的问题,在lucene官方的文档中也有说明,我建议你重点看下lucene官方文档。http://lucene.apache.org/ 这个是下载地址。

生成索引时加上: document.setBoost(100); //自定义评分,如100
查询时使用: org.apache.lucene.search.function.FieldScoreQuery;

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题