Lucene确切的排序

时间:2008-08-12 05:51:02

标签: lucene

我有这个长期问题,不太了解如何实现体面的Lucene排序或排名。说我有一份城市及其人口清单。如果有人搜索“新”或“伦敦”,我想要按人口排序的前缀匹配列表,我有一个前缀搜索工作和按字段排序的字段,其中有一个人口字段,IE New Mexico,New York ;或伦敦,伦敦德里。

但是我也总是希望完全匹配的名称位于顶部。因此,对于“伦敦”,该列表应显示“伦敦,伦敦,伦敦德里”,其中第一个伦敦在英国,第二个伦敦在康涅狄格州,即使伦敦德里的人口比伦敦CT高。

有没有人有一个查询解决方案?

3 个答案:

答案 0 :(得分:3)

dlamblin,让我看看我是否正确得到了这个:你想要创建一个基于前缀的查询,然后按人口排序结果,并可能将排序顺序与首选项结合起来进行完全匹配。 我建议你将搜索与排序分开,并使用CustomSorter进行排序: 这是a blog entry describing a custom sorterThe classic Lucene book很好地描述了这一点。

答案 1 :(得分:1)

的API
  

<强> Sortcomparator

  

对于该领域中的每个唯一术语,都有一个独特的可比较 - 如果   一些文件中有相同的术语   该字段,缓存数组将具有   引用相同的条目   可比

您可以申请

  

<强> FieldSortedHitQueue

到具有Comparator字段的sortcomparator,api说...

  

存储对应的比较器   每个字段按照排序。

因此,该术语可以相应地分类

答案 2 :(得分:0)

我目前的解决方案是创建一个精确的搜索器和一个前缀搜索器,两者都按反向填充排序,然后从精确命中开始复制出我的所有命中,移动到前缀命中。它使分页我的结果比我想象的要稍微烦人。

此外,我使用散列来消除重复,但后来将前缀搜索器更改为前缀搜索(MUST)的布尔查询,并使用精确搜索(MUST NOT),以使Lucene删除重复项。虽然这看起来更浪费。

编辑:已移至评论(因为该功能现已存在):Yuval F感谢您的博文...排序比较器如何知道名称字段“london “如果无法访问搜索字词,则与搜索字词”london“完全匹配?