首页 文章

Elasticsearch ::排序给出了奇怪的结果

提问于
浏览
1

当我第一次搜索时,它会对所有文档进行排序并给出前5条记录 . 但是,如果通过更改排序方向(ASC - > DESC)执行相同的搜索查询,那么它不再对所有文档进行排序,它会给我最后5个检索到的文档(来自先前的搜索查询),按照desc顺序对它们进行排序,并给出它回到我身边 . 我期待它将按DESC顺序对所有可用文档进行排序,然后检索前5个结果 .

我做错了什么,或者错过了任何概念 .

我的搜索查询:

{
    "sort": {
        "taskid": {
            "order": "ASC"
        }
    },
    "from": 0,
    "size": 5,
    "query": {
        "filtered": {
            "query": {
                "match_all": []
            }
        }
    }
}

我有taskid 1到100的数据 . 现在上面的查询在第一次尝试时从taskid 1到5获取了记录 . 现在,当我将排序方向更改为desc时,我希望返回带有taskid 96-100(100,99,98,97,96序列)的文档,但是我返回了带有taskid 5,4,3,2的文档,按顺序排列1 . 这意味着,排序仅在之前返回的结果上完成 .

请注意,我的文档中的taskid和_id是相同的 . 我在映射中添加了一个冗余字段,与_id相同

3 回答

  • 3

    在弹性搜索中,在从es中提取结果之后应用排序查询 . 根据您问题中提到的查询,首先根据搜索条件过滤结果,然后对过滤后的结果应用排序 .

  • 4

    如果看起来您只是根据数据的旧子集获得结果,那么可能是您的新数据尚未编入索引 . 这可以在自动化测试中轻松实现,但通过手动测试则不太可能 .

    每秒重建段,因此在索引和搜索之间添加大约一秒的延迟/睡眠应该可以解决您的测试问题 .

  • 0

    只需更改 order 键中值的大小写即可 .

    {
    "sort": {
        "taskid": {
            "order": "asc"   // or "desc"
        }
    },
    "from": 0,
    "size": 5,
    "query": {
        "filtered": {
            "query": {
                "match_all": []
            }
        }
      }
    }
    

    希望这可以帮助..

相关问题