带有对象的ElasticSearch null_value?

时间:2015-04-24 07:05:19

标签: elasticsearch mapping

是否可以在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,我想创建一个对象,其属性按其null_value映射填充。在底层属性上指定null_value似乎不起作用。

ElasticSearch是否允许对象的null_value映射?

2 个答案:

答案 0 :(得分:2)

首先,让我们看看null_value的作用。对于字段name,如果将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。

答案 1 :(得分:1)

不,您不能将null_valuetype : object一起使用

但是field_value_factor可以选择missing检查文档https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html

  

如果文档没有该字段,则使用该值。修饰符和   因子仍然适用于它,就像它是从   文档。