我想知道当没有指定搜索查询时(我只过滤文档)并且没有指定排序选项时,弹性搜索如何排序(在什么字段上)。看起来排序比随机排序...默认排序顺序是_score,但是当你没有指定搜索查询时得分总是1 ...
答案 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如何计算分数并了解其按该顺序返回的原因。