ElasticSearch null_value 有一个对象?

ElasticSearch null_value with an object?

是否可以在 ElasticSearch 中使用对象进行 null_value 映射?

{
   "properties-v3": {
      "mappings": {
         "property": {
            "properties": {
               // ... omitting lots of properties for brevity
               "stats": { // <-- Need to populate this if null
                  "properties": {
                     "bookings": {
                        "type": "long",
                        "null_value": 0
                     },
                     "enquiries": {
                        "type": "long",
                        "null_value": 0
                     },
                     "favorites": {
                        "type": "long",
                        "null_value": 0
                     },
                     "pageViews": {
                        "type": "long",
                        "null_value": 0
                     }
                  }
               },
               // ... more properties here
            }
         }
      }
   }
}

如果上面映射中的 stats 属性 为空,我想创建一个对象,并根据 null_value 映射填充属性。在基础属性上指定 null_value 似乎不起作用。

ElasticSearch 是否允许 null_value 对象映射?

首先,让我们看看 null_value 做了什么。对于字段名称,如果 null_value 设置为某个值,它不会将此信息添加到 _source,而是将此值转到反向索引。这意味着您可以根据 null_value 进行搜索,但它不会显示在 _source.

举个例子,假设我正在为以下文档编制索引 -

{
  "class" : "10m
  "address" : "abcs"
}

在这里,让我们说,对于我们启用 null_value 作为 "John" 的字段名称 现在,如果我执行以下查询 -

{
   "query" : {
             "match" : {
                   "name" : "john"
              }
   }
}

它会匹配上一个文档,即使它没有值为 john 的字段名称。但随后在返回的文档中不会显示此值。这意味着 _source 无论如何都没有改变,只是我们正在改变整个上下文的搜索能力行为。

现在回到你的问题 - 如果你想把 null_value 放到一个对象上说, 对于字段名称,将以下对象设置为 null_value

{
   "first_name" : "john",
   "last_name" : "dep"
}

然后,可以将 null_value 分配给两个字段 name.first_name 和 name.last_name 分别作为 john 和 dep。

不,你不能将 null_valuetype : object

一起使用

但是field_value_factor有一个选项missing查看文档https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html

Value used if the document doesn’t have that field. The modifier and factor are still applied to it as though it were read from the document.