【问题标题】:Merging dynamic field with type date/string triggered conflict合并类型为日期/字符串的动态字段触发冲突
【发布时间】:2016-01-12 20:08:37
【问题描述】:

我正在我的 Elasticsearch 服务器上上传 json 文件,并且我有一个带有字段名称和字段值的对象“元”。有时值是字符串,有时是日期,因此动态映射不起作用。 我试图放置一个显式映射以将字段设置为字符串,但我总是有相同的错误 “合并动态更新触发了冲突:不同类型的映射器 [customer.meta.value],current_type [string],merged_type [日期]"}}}, :level=>:warn"

是否可以使用参数“ignore_conflict”或者如何上传多类型字段?

谢谢

【问题讨论】:

  • 看来ignore_conflict 只会掩盖问题。当您尝试进行搜索时,它可能仍然会在将来伤害您。如果你对它一直是一个字符串没意见,我会努力让它发挥作用。您的映射是什么样的?
  • 您的显式映射不会更改现有索引。你把旧的扔掉了吗?
  • 是的,我放弃了旧的。
  • 我认为最好的解决方案是动态映射,但我不知道如果我有两种数据类型怎么办

标签: json elasticsearch logstash


【解决方案1】:

elasticsearch 中的同一字段不能有两种数据类型。无法对其进行索引。动态映射意味着从插入到字段中的第一个值来识别类型。如果您尝试在该字段中插入其他类型,则会出错。如果您需要同时存储字符串和日期,最好的办法是将映射设置为使用字符串,并在将日期传递给 elasticsearch 之前将其显式转换为字符串。

【讨论】:

    【解决方案2】:

    我为 _default_ 禁用了 date_detection,这很有效。 现在我的问题如下:我只想为 meta.value 和 customer.meta.value 禁用 date_detection。第一个是正确的,但第二个我不能,因为我认为它是一个嵌套对象。

    我试过了:

    curl -XPUT 'localhost:9200/rr_sa' -d '
    {
       "mappings": {
           "meta": {
               "date_detection": false
             },
            "customer.meta": {
                "date_detection": false
             }
          }
       }
     '
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-27
      • 1970-01-01
      相关资源
      最近更新 更多