【问题标题】:How can I control the order of results? Lucene range queries in Cloudant如何控制结果的顺序? Cloudant 中的 Lucene 范围查询
【发布时间】:2015-03-09 19:34:46
【问题描述】:

我有一个简单的索引,它以 1000 为增量输出从 1000 到 12000 的“分数”。例如,我想获得从低分到高分的一系列结果;

q=score:[1000 TO 3000]

但是,这始终会返回从 3000 开始的匹配列表,并且根据限制(和匹配数量),它可能永远不会返回任何 1000 匹配,即使它们存在。我尝试使用 sort:+- 和分组,但似乎对返回的结果没有任何影响。

所以;如何控制返回结果的顺序?

理想情况下,我想要的是从范围中选择匹配项,但我假设这是不可能的,因为查询只是从顶部开始填充结果?

供参考,索引如下所示;

function(doc) {
    var score = doc.score;
    index("score", score, {
        "store": "yes"
    });
...

【问题讨论】:

  • 我不认为我可以使用 boost btw;唯一使一个指数比另一个指数高的就是分数,没有别的

标签: lucene cloudant


【解决方案1】:

我无法对此发表评论,因此在此处发布答案:

根据关于 lucene 查询的 cloudant 文档,没有办法对查询结果进行排序。那里给出的排序选项用于分组。即使对于分组结果,我也从未见过排序工作。在任何情况下,都应该对组本身的顺序进行排序。不是里面的数据。

【讨论】:

    【解决方案2】:

    @pal2ie 你是对的,Cloudant 已经回复我确认了。在某种程度上,这确实是有道理的,但我希望我至少可以控制方向(lo->hi,hi->lo)。为了在范围内获得更好的分布,我实施的解决方案是不使用范围查询,而是使用范围查询;

    1. 为范围内的每个分数创建所需结果数量的分布(例如简单的离散高斯分布)
    2. 对范围内的每个分数执行单独的查询,并将限制设置为该分数的所需结果数
    3. 从 min 到 max 执行第 2 步,填满结果

    这不是最有效的,因为它意味着多次往返服务器,但至少它让我可以完全控制范围内的分布

    【讨论】:

      猜你喜欢
      • 2019-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 2019-10-31
      • 1970-01-01
      相关资源
      最近更新 更多