如果未指定排序选项且未指定搜索查询,Elastic Search如何排序

时间:2014-05-28 18:33:10

标签: elasticsearch

我想知道当没有指定搜索查询时(我只过滤文档)并且没有指定排序选项时,弹性搜索如何排序(在什么字段上)。看起来排序比随机排序...默认排序顺序是_score,但是当你没有指定搜索查询时得分总是1 ...

3 个答案:

答案 0 :(得分:2)

你做对了。然后它或多或少随机,得分为1.就我记忆而言,你仍然可以得到一致的结果。当您在SQL中获得结果但未指定ORDER BY时,您具有“相同”。

答案 1 :(得分:1)

分数主要用于排序,分数是通过使用多个约束进行lucene分数计算得出的,有关详细信息 refer here

答案 2 :(得分:0)

以防万一有人看到它,即使它发布于6年之前。.

当您想知道Elasticsearch如何计算自己的分数_score时,可以使用explain option

我想您的查询(带有过滤器且不带搜索)可能或多或少都喜欢这样(但关键是要explain option true):

    POST /goods/_search
    {
        "explain": true, 
        "query": {
            "bool": {
                "must": {
                    "match_all": {}
                },
                "filter": {
                    "term": {
                        "maker_name": "nike"
                    }
                }
            }
        }
    }

运行此命令时,您会注意到每个匹配的_explaination描述如下:

    "_explanation" : {
        "value" : 1.0,
        "description" : "ConstantScore(maker_name:nike)",
        "details" : [ ]
    }

这意味着ES将constant score分配给了所有匹配。

因此,回答问题“是”。 结果是随机排序的,因为所有过滤的结果都具有相同(恒定)的分数,而没有任何搜索查询。

顺便说一句,启用解释选项在使用搜索查询时会更有帮助。您将看到ES如何计算分数并了解其按该顺序返回的原因。