根据映射我正在排序的字段是 double 类型,我期望排序将缺失值视为 0,因为我有一些负值,我希望它们低于缺失值。(目前缺少低于负数)
我如何实现这一目标?
根据映射我正在排序的字段是 double 类型,我期望排序将缺失值视为 0,因为我有一些负值,我希望它们低于缺失值。(目前缺少低于负数)
我如何实现这一目标?
有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 而不是缺失值来索引您的文档,这将使事情变得更容易 - 您将能够对所需的字段进行排序。
您似乎描述了缺失或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
这将按预期顺序返回文档