如何控制结果的顺序? Lucene在Cloudant中进行范围查询

时间:2015-02-26 10:15:27

标签: lucene cloudant

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

q=score:[1000 TO 3000]

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

因此;如何控制返回结果的顺序?

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

作为参考,索引如下所示;

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

2 个答案:

答案 0 :(得分:0)

我无法对此发表评论,所以在这里发布答案:

基于lucene查询的cloudant doc,没有一种方法可以对查询结果进行排序。给出的排序选项用于分组。即使对于分组结果,我也从未看过排序工作。无论如何,它应该对组本身的序列进行排序。不是其中的数据。

答案 1 :(得分:0)

@ pal2ie你是对的,Cloudant回复给我确认了。它在某种程度上确实有意义,但我希望我至少可以控制方向(lo-> hi,hi-> lo)。我实现的在整个范围内获得更好分布的解决方案是不使用范围查询,而是使用

  1. 为该范围内的每个分数创建所需结果数量的分布(例如,简单,离散,高斯)
  2. 对范围内的每个分数执行单独查询,并将限制设置为该分数所需结果的数量
  3. 从最小值到最大值执行第2步,填写结果
  4. 它不是最有效的,因为它意味着多次往返服务器,但至少它让我可以完全控制范围内的分布