我们使用Lucene.Net在网站上进行产品搜索。对于某个类别,我们会获取所有与字段类别完全匹配的产品以及类别唯一ID。
对于一个客户,我们要求在没有其他标准时以特定顺序列出产品。这些按类别排列,产品可以出现在多个类别中。所以我们不能只有一个全球订单领域。我首先考虑的是一个开箱即用的解决方案Lucene.net是为产品中的每个类别设置一个字段,其中包含排序顺序。但如果有很多类别,这将无法很好地扩展。
输入搜索字词或选择构面后,我们会使用常规评分系统通过最佳匹配对产品进行订购。但是当一个类别只有一个术语查询时,我们希望能够按特定顺序对它们进行排序。
有没有一种方法可以使用自定义记分器来接受ID或类似的列表,并根据它进行评分?基本上我们需要做的是按照数据库表或其他外部源中指定的顺序对Lucene搜索结果进行排序。
答案 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