2008-08-12 36 views
4

我有这个长期问题不完全理解如何实现体面的Lucene排序或排名。假设我有一份城市及其人口的列表。如果有人搜索“新的”或“伦敦”,我想要按照人口排列的前缀匹配列表,我有一个前缀搜索和按字段排序的字段,其中有一个人口字段,IE新墨西哥州,纽约;或伦敦德里的伦敦。Lucene确切订购

但是我总是希望确切的匹配名称位于顶部。因此,就“伦敦”而言,即使伦敦德里的人口多于伦敦的CT,伦敦,伦敦,伦敦德里的伦敦德里的第一个伦敦在英国,第二个伦敦在康涅狄格。

有没有人有单一的查询解决方案?

回答

3

dlamblin,让我看看我是否正确地得到这个结果:你想做一个基于前缀的查询,然后按照总体对结果进行排序,也许把排序顺序和偏好结合到一起。 我建议你从排序中分离搜索,并使用CustomSorter进行排序: Here's a blog entry describing a custom sorterThe classic Lucene book描述了这一点。

+0

谢谢您的博客文章,解释了如何实现一种比较方便的是不需要定义2班。但是,由于排序比较器只能在两个文档中工作而不知道搜索词,因此无法对结果进行排序,因为我在我的问题中描述了它们。如果排序比较器不能访问搜索词,那么排序比较器如何知道名称字段“london”与搜索词“london”完全匹配? – dlamblin 2009-09-03 00:32:41

0

我目前的解决方案是创建一个精确的搜索器和前缀搜索器,这两个搜索器都按逆向群体排序,然后将所有搜索结果从精确匹配中复制出来,移至前缀匹配。它使我的结果分页比我认为应该更令人讨厌。

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

编辑:移动到评论(因为功能现在存在):Yuval F谢谢您的博客帖子......那种比较怎么知道这个名字字段“伦敦”的检索词完全匹配“伦敦“如果它无法访问搜索字词?

1

API为

Sortcomparator

有一个明显可比在现场每一个独特的名词 - 如果 一些文件在同一期限 该字段,缓存阵列将有 entri ES其中引用相同的 可比

您可以将

FieldSortedHitQueue

到具有比较字段该API称sortcomparator ...

存储比较器cor每个字段按 排序。

因此,这个词可相应地进行排序