【问题标题】:Cannot create elasticsearch mapping or get date field to work无法创建弹性搜索映射或使日期字段工作
【发布时间】:2020-06-29 01:52:44
【问题描述】:
{
  "error" : {
    "root_cause" : [
      {
        "type" : "illegal_argument_exception",
        "reason" : "Types cannot be provided in put mapping requests, unless the include_type_name parameter is set to true."
      }
  "status" : 400

我读到上面的内容是因为在 elasticsearch 7.7 中不推荐使用类型,这对数据类型有效吗?我的意思是我该怎么说我希望将数据视为日期? 我当前的映射有这个元素:

"Time": {
  "type": "text",
  "fields": {
    "keyword": {
      "type": "keyword",
      "ignore_above": 256
    }
  }
},

我只是想用 type:"date" 再次创建它,但我注意到即使复制粘贴当前映射(有效)也会产生错误...我拥有的索引和映射由 https://github.com/jayzeng/scrapy-elasticsearch 自动生成 我的目标只是拥有一个日期字段,我的索引中有我的所有日​​期,但是当我想在 kibana 中过滤时,我可以看到它不被视为日期字段。而且修改映射似乎不是一种选择。 这里有明显的ELK菜鸟,请和我一起裸露(:

这个错误很讽刺,因为我粘贴了现有索引/映射中的映射...

【问题讨论】:

    标签: elasticsearch scrapy kibana elastic-stack


    【解决方案1】:

    您遇到这种情况是因为 change in 7.0 关于命名文档类型的问题。

    长话短说,而不是

    PUT example_index
    {
      "mappings": {
        "_doc_type": {
          "properties": {
            "Time": {
              "type": "date",
              "fields": {
                "keyword": {
                  "type": "keyword"
                }
              }
            }
          }
        }
      }
    }
    

    你应该这样做

    PUT example_index
    {
      "mappings": {        <-- Note no top-level doc type definition
        "properties": {
          "Time": {
            "type": "date",
            "fields": {
              "keyword": {
                "type": "keyword"
              }
            }
          }
        }
      }
    }
    

    我不熟悉你的 scrapy 包,但乍一看它似乎只是原生 py ES 客户端的包装器,它应该将你的映射定义转发给 ES。


    警告:如果您将字段定义为 text,并且您打算将其更改为 date(或添加 field 类型为 date),您将收到以下错误:

    mapper [Time] of different type, current_type [text], merged_type [date]
    

    你基本上有两种选择:

    1. 删除索引,设置新映射并重新索引所有内容(最简单但会导致停机)
    2. 使用新字段扩展映射,我们称之为 Time_as_datetime 并使用 script 更新您现有的文档(引入一个全新的字段/属性 - 这有点冗长)

    【讨论】:

    • 我其实没有顶级,看我在原帖里加的图。我可以删除索引,这不是问题。但不幸的是,我使用的那个包不允许我定义映射,所以我想我必须自己做,然后它不会覆盖它(希望如此)
    • 您分享的只是映射的sn-p。也可以分享一下顶级吗?其次,如果包不支持添加映射,可以使用 python 客户端或者 Kibana 来添加。
    • 我分享的截图来自 Kibana。你是什​​么意思?没有顶层,截图是从顶层开始的,其余的只是其他名称不同的元素
    • 你能从 Kibana 粘贴 GET your_index_name 的结果吗?
    • 我发现映射工作出了什么问题。基本上,如果我删除它经过的“项目”根对象并创建我的映射。问题是,我的 scrapy 模块在此之后无法工作,因为它使用 ELASTICSEARCH_TYPE = 'items'。所以我可以有映射:{properties:{....}} 但没有映射:{properties:{items:{....}}},知道为什么吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-20
    • 2021-12-10
    相关资源
    最近更新 更多