按特定顺序对Lucene.net搜索结果进行排序
本文关键字:搜索结果 排序 net Lucene 定顺序 | 更新日期: 2023-09-27 18:01:15
我们使用Lucene.Net在网站上进行产品搜索。对于一个类别,我们获取所有与类别唯一id的字段类别完全匹配的产品。
对于一个客户,当没有其他标准时,我们要求产品按特定顺序列出。这些是按类别排列的,产品可以出现在多个类别中。所以我们不能只拥有一个全局订单字段。对于一个可以使用开箱即用的Lucene.net的解决方案,我的第一个想法是为产品上的每个类别都有一个字段,其中将包含排序顺序。但如果有很多类别的话,这就不会很好地扩展。
一旦输入了搜索项或选择了一个方面,我们就会使用常规评分系统按照最佳匹配来订购产品。但是,当一个类别只有一个术语查询时,我们希望能够按照特定的顺序对它们进行排序。
有没有一种方法可以让自定义记分员接受一系列ID或类似信息,并根据这些信息进行评分?本质上,我们需要做的是按照数据库表或其他外部源中指定的顺序对Lucene搜索结果进行排序。
这不是一个开箱即用的解决方案,我们使用的是Open Search Server,我认为它是同一搜索引擎的包装。我们有类似的要求以及一大堆其他要求(复杂的过滤/权限/安全(,这些要求驱使我们将搜索引擎的结果缓存在数据库中(它会在后台线程上对结果进行分页并将其持久化到数据库中(,之后,您可以在搜索结果和数据库中的其他表之间进行联接,并根据您的内心内容进行索引排序。只是一个想法。。。
在针对高流量网站的类似解决方案中,我们自己进行了排序。Lucene会找到结果,然后我们对它们进行动态排序,并给出一个分页结果。大多数.net排序算法都足够有效,但我们使用了基数排序(http://en.wikipedia.org/wiki/Radix_sort)让它按照我们的喜好表演。
我使用的是基于Lucene的Elasticsearch,我这样做的方式是增加元素排序所需的字段。
第二种方法是纯Javascripthttp://isotope.metafizzy.co/,元素是动态渲染的,然后通过javascript排序,请看一些例子,这可能会对你有所帮助!编辑:ALL取决于你的逻辑:如果你想按类别订购:增加类别!
场景:用户要求类别:移动,使用正常的评分系统,假设您有以下结果
:用户正在寻找诺基亚
product1:类别:汽车,标题:诺基亚汽车,得分:3.34
产品2:类别:电器,标题:酷诺基亚电器:得分3.32
product3:类别:手机,标题:诺基亚3310:得分2.32
产品4:类别:手机,标题:诺基亚6600:得分2.31
现在,如果字段类别被提升,您将获得以下信息:
product1:类别:手机,标题:诺基亚3310,得分:6.35
产品2:类别:手机,标题:诺基亚6600:得分6.32
产品3:类别:家电,标题:其他诺基亚:得分2.32
产品4:类别:汽车,标题:诺基亚汽车:得分2.31
我使用的分数是任意的