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

时间:2016-08-31 10:33:31

标签: sorting elasticsearch elasticsearch-plugin elasticsearch-2.0

当我第一次搜索时,它会对所有文档进行排序并给出前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 个答案:

答案 0 :(得分:4)

In elastic search, sort query is applied after the result are extracted from the es. As per the query mentioned in your question, first result is filtered based on search criteria, and then sorting is applied on the filtered result.

答案 1 :(得分:3)

Just change the case of the value in order key and you are good to go.

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

Hope this helps..

答案 2 :(得分:0)

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

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