如何在Elastic中使空值排在最后?

3

在elastic search中如何对字符串字段进行排序?我需要将其放在最后,但无法实现。

我尝试了一些按升序排序,但没有起作用。

示例:

Original Answer翻译成"最初的回答"

[
{"url":"https://amazon"},
{"url":"https://amazon"},
{"url":null},
{"url":"https://amazon"}
]

"最初的回答": 我的代码:
sourceBuilder = sourceBuilder.sort("url", SortOrder.ASC)

使用我的代码,我得到了同样的结果。

I expect to see:
[
{"url":"https://amazon"},
{"url":"https://amazon"},
{"url":"https://amazon"},
{"url":null}
]
1个回答

1
尝试在排序中使用"missing": "_last"。
GET testindex/_search
{
  "sort": [
    {
      "url": {
        "order": "asc",
        "missing": "_last"
      }
    }
  ]
}

映射

PUT testindex3/_mapping
{
  "properties": {
    "url": {
      "type": "text",
      "fields": {
        "keyword": {
          "type": "keyword",
          "ignore_above": 256
        }
      }
    }
  }
}

请添加映射 - jaspreet chahal
"url": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } - Иван
在答案中添加了映射后,我得到了空值。希望空值不会被输入为文本。例如,我正在输入空的URL作为POST测试索引3/_doc { "url": null } 这将把它视为缺失值。如果输入为"url":"null",则将被视为普通字符串值,在这种情况下,需要使用自定义脚本排序将其放在最后,或者需要重新索引文档并插入"null"作为URL。 - jaspreet chahal
如果排序不是关键字,则会出现错误:"reason": "文本字段默认情况下禁用了字段数据。请在 [url] 上设置 fielddata=true,以便通过反转索引将字段数据加载到内存中。请注意,这可能会使用大量的内存。或者可以使用关键字字段作为替代方案。" - Иван
对于在文本字段上进行排序,必须使用关键字,该关键字使用整个文本作为关键字。对于空值不出现在最后,我无法找到原因。 - jaspreet chahal
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接