0

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

我如何实现这一目标?

4

2 回答 2

1

exists查询(https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-exists-query.html),您可以在查询中与not过滤器一起使用( https://www .elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html)进行排序,并在您的情况下为缺失值提供所需的提升/得分为 0.0。function score

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

于 2017-02-16T09:47:17.757 回答
0

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

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

一个简单的例子:

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" },
    ]
}

2, 1, 3这将按预期顺序返回文档

于 2017-02-16T09:47:48.673 回答