我正在搜索“产品文档”。换句话说,我的solr文档是产品记录。我想说一下查询的前50个匹配产品。然后我希望能够按名称或价格对排名前50的得分文件进行排序。我没有看到如何做到这一点,因为按分数排序,然后按名称或价格排序将不会真正有用,因为分数是浮点数。
我不介意我是否可以做一些事情,比如将得分映射到范围(比如得分为8.0-8.99将进入8桶分数),然后按范围排序,然后按名称排序,但因为基本上有没有对得分进行规范化,这仍然会让事情变得更难。
Tl; dr如何在排序前从solr结果集中排除低得分文档?
答案 0 :(得分:3)
您可以使用frange
来实现此目的,只要您不想对分数进行排序(在这种情况下,我猜您可以在客户端进行过滤)。
您的查询将是:
q={!frange l=5}query($qq)&qq=[awesome product]&sort=price asc
将q-frange参数中的l参数设置为要过滤得分的下限,并将qq参数替换为您的用户查询。
答案 1 :(得分:1)
正如Karl Johansson所观察到的,您可以在客户端进行过滤:加载响应的前50行(按分数desc排序),然后在JS中操作它们。
jQuery DataTables plugin非常适用于这种事情:排序,排序多列,动态过滤等等 - 只有50行它也会非常快,所以用户可以“玩”通过排序和过滤,直到找到他们想要的东西。
答案 2 :(得分:0)
我认为你不能简单地
从中排除低得分文件 排序前的solr结果集
因为相关性分数仅对搜索查询和结果文档列表的给定组合有意义。即分数仅在给定搜索中有意义,并且您无法为所有搜索设置一些阈值。
如果您使用的是Java(或PHP),那么您可以获得前50个文档,然后使用您的编程语言对该列表进行重新排序,但我认为您不能仅使用SOLR进行此操作。
无论如何,我建议你不要沿着这条路线重新排序来自SOLR的结果,因为它会让用户感到困惑。人们期望搜索结果就像谷歌(以及大多数其他搜索引擎),其结果以某种形式的TFIDF排名回归。
话虽如此,您可以使用其他一些标准,通过根据价格范围比例添加index-time boost因子来分隔具有相同相关性分数的文档。
我建议您使用SOLR来发挥其优势并使用方面。在左侧提供价格范围方面(如Ebay,亚马逊等)和/或产品类别方面等。还提供“排序”小组件,以允许按产品名称对结果进行排序(如果用户需要)它
[编辑]这个问题可能也有用: