按特定顺序排序Lucene.net搜索结果

时间:2014-05-01 14:40:44

标签: c# sorting lucene.net

我们使用Lucene.Net在网站上进行产品搜索。对于某个类别,我们会获取所有与字段类别完全匹配的产品以及类别唯一ID。

对于一个客户,我们要求在没有其他标准时以特定顺序列出产品。这些按类别排列,产品可以出现在多个类别中。所以我们不能只有一个全球订单领域。我首先考虑的是一个开箱即用的解决方案Lucene.net是为产品中的每个类别设置一个字段,其中包含排序顺序。但如果有很多类别,这将无法很好地扩展。

输入搜索字词或选择构面后,我们会使用常规评分系统通过最佳匹配对产品进行订购。但是当一个类别只有一个术语查询时,我们希望能够按特定顺序对它们进行排序。

有没有一种方法可以使用自定义记分器来接受ID或类似的列表,并根据它进行评分?基本上我们需要做的是按照数据库表或其他外部源中指定的顺序对Lucene搜索结果进行排序。

3 个答案:

答案 0 :(得分:0)

这不是一个开箱即用的解决方案,我们使用的是Open Search Server,我相信它是同一个搜索引擎的包装器。我们有类似的要求以及一大堆其他要求(复杂的过滤/权限/安全性),这促使我们将搜索引擎的结果缓存在数据库中(它会在后台线程中翻阅结果并将它们保存到DB)之后,您可以在搜索结果与数据库中的其他表之间进行连接,并对您的内容进行索引排序。只是一个想法...

答案 1 :(得分:0)

在高流量网站的类似解决方案中,我们自己进行了排序。 Lucene会找到结果,然后我们会立即对它们进行排序并给出分页结果。大多数.net排序算法都足够高效,但我们使用基数排序(http://en.wikipedia.org/wiki/Radix_sort)来让它按照我们的喜好执行。

答案 2 :(得分:0)


我使用基于Lucene的Elasticsearch,以及我这样做的方法是增加你想要元素排序的字段。
第二种方法是纯Javascript http://isotope.metafizzy.co/,元素在运行时呈现,然后通过javascript排序,请参阅一些示例,它可能会对您有所帮助! 编辑: 全部依赖于您的逻辑:如果您想按类别排序:提升类别!

场景:用户要求分类:移动,使用正常的评分系统,让我们说你有这个结果
: 用户寻找诺基亚

产品1:类别:汽车,标题:诺基亚汽车,得分:3.34
product2:category:appliance,title:cool nokia appliance:得分3.32
产品3:类别:手机,标题:诺基亚3310:得分2.32
产品4:类别:手机,标题:诺基亚6600:得分2.31


现在,如果字段类别被提升,您将拥有:
产品1:类别:手机,标题:诺基亚3310,得分:6.35
产品2:类别:手机,标题:诺基亚6600:得分6.32
product3:category:appliance,title:other nokia:得分2.32
product4:category:car,title:nokia car:得分2.31

我使用的分数是任意的