【问题标题】:ElasticSearch null_value with an object?ElasticSearch null_value 与对象?
【发布时间】:2015-07-02 15:57:57
【问题描述】:

是否可以在 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 映射?

【问题讨论】:

    标签: elasticsearch mapping


    【解决方案1】:

    首先,让我们看看 null_value 的作用。对于字段 name ,如果有 null_value 设置为某个 value ,它不会将此信息添加到 _source ,而是此 value 将转到反向索引。这意味着您可以根据 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。

    【讨论】:

    • 感谢您的回答。我的问题是我想将function_scorefield_value_factor 一起使用,但如果只有一个文档具有stats null,则整个查询将失败。我想没有办法解决这个问题?
    【解决方案2】:

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

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

    文档没有该字段时使用的值。修饰符和 因子仍然应用于它,就好像它是从 文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多