【问题标题】:Conditional sorting in Solr 3.6Solr 3.6 中的条件排序
【发布时间】:2012-10-06 23:53:53
【问题描述】:

我们正在运行 Solr 3.6 并尝试对结果集应用条件排序。澄清一下,数据是一组出价,我们希望添加按当前用户出价排序的选项,因此它不能用作常规排序(因为运行查询的每个用户的出价都不同)。

结果集中的文档包含一个“CurrentUserId”和“CurrentBid”字段,所以我认为我们需要类似以下内容来排序:

sort=((CurrentUserId = 12345) ? CurrentBid : 0) desc

这只是伪代码,但想法是如果Solr中的currentUserId与用户Id(本例中为12345)匹配,则按CurrentBid排序,否则就使用0。

似乎通过查询进行排序可能是实现这一目标的方法(或至少构成解决方案的一部分),使用类似以下查询:

http://localhost:8080/solr/select/?q=<em>:</em>&amp;sort=query(CurrentUserId:10330 AND CurrentBid:[1 TO *])+desc

这似乎对我不起作用,并导致以下错误:

sort param could not be parsed as a query, and is not a field that exists in the index: ...

Solr documentation 表示从 Solr 1.4 开始可以将查询函数用作排序参数,所以这似乎应该可以工作。

任何关于如何实现这一目标的建议将不胜感激。

【问题讨论】:

    标签: sorting solr


    【解决方案1】:

    根据您提供的 Solr 文档链接,

    通过取消引用 $otherparam 的参数或通过 "v" 在 LocalParams 中直接指定查询字符串来支持任何类型的子查询。

    因此,根据示例和您的查询,我认为以下一项或两项应该有效:

    http://localhost:8080/solr/select/?q=:&amp;sort=query($qq)+desc&amp;qq=(CurrentUserId:10330 AND CurrentBid:[1 TO *])

    http://localhost:8080/solr/select/?q=:&amp;sort=query({v='CurrentUserId:10330 AND CurrentBid:[1 TO *]'})+desc

    【讨论】:

    • 这很有效,让我更接近解决方案。仍然需要弄清楚出价金额如何影响排序顺序,但我现在将这个答案标记为已接受,因为这是一个好的开始。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2017-03-11
    • 1970-01-01
    • 2017-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多