Elasticsearch 2.x 将缺失值视为 0.0 进行排序

Elasticsearch 2.x sort with missing value treated as 0.0

根据映射,我排序的字段是双精度类型 我期望排序将缺失值视为 0,因为我有一些负值,我希望它们低于缺失值。 (目前缺失值低于负数)

我该如何实现?

exists 查询 (https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-exists-query.html), which you can use along with not filter in function score query (https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html) 用于排序,并在您的情况下为缺失值提供所需的 boost/score 作为 0.0。

但我建议更简单的解决方案 - 只需使用等于 0.0 的字段索引您的文档而不是缺失值,这将使事情变得容易得多 - 您将能够只对所需的字段进行排序。

您似乎描述了缺失值或 null 值应作为 0 值处理。如果您不需要能够将它们与实际的“0”值区分开来,您可以使用 null_value,请参阅 the manual

如果你这样做,在另一种情况下,必须区分它们,你可能需要添加一个标志或其他东西(所以第二个字段)来实际说 "but this was actually missing",但这实际上取决于你的用例

一个简单的例子:

PUT test
{
  "mappings": {
    "my_type": {
      "properties": {
        "status_code": {
          "type":       "integer",
          "null_value": 0 
        }
      }
    }
  }
}

PUT test/my_type/1
{
  "status_code": null
}
PUT test/my_type/2
{
  "status_code": -1
}
PUT test/my_type/3
{
  "status_code": 1
}

GET test/my_type/_search
{
    sort" : [
        { "status_code" : "desc" },
    ]
}

这将 return 按预期2, 1, 3 顺序排列文档