You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Elasticsearch7.3.2索引映射与批量导入错误排查求助

解决Elasticsearch 7.3.2映射创建与批量导入的错误问题

一、先搞定「Root mapping definition has unsupported parameters」映射错误

ES 7.x版本开始彻底取消了多类型支持,默认类型是_doc,而且映射的语法结构有严格要求,你之前的写法大概率是不符合ES7的规范(比如错误地在根节点放置了类型名称或不支持的参数)。

给你一个正确的movies2索引映射模板,包含actorsdirectors的text类型+raw不分析子字段:

PUT /movies2
{
  "mappings": {
    "properties": {
      "title": {
        "type": "text",
        "fields": {
          "raw": {
            "type": "keyword"
          }
        }
      },
      "actors": {
        "type": "text",
        "fields": {
          "raw": {
            "type": "keyword"
          }
        }
      },
      "directors": {
        "type": "text",
        "fields": {
          "raw": {
            "type": "keyword"
          }
        }
      },
      // 按需补充其他字段,比如年份、类型等
      "year": {
        "type": "integer"
      },
      "genre": {
        "type": "text",
        "fields": {
          "raw": {
            "type": "keyword"
          }
        }
      }
    }
  }
}

关键注意点:

  • 无需在mappings下单独指定类型名称(比如之前的movie),直接通过properties定义所有字段
  • raw子字段用keyword类型,天然就是不分析的,适合精确匹配、聚合场景
  • 所有字段必须嵌套在properties节点下,根节点不能有多余参数

二、解决批量导入时「final mapping would have more than 1 type: [_doc, movie]」错误

这个错误的核心是:ES7.x不允许一个索引存在多个类型,但你的批量导入数据里还在指定type: movie,和默认的_doc冲突了。

给你两种简单的解决方式:

方法1:修改批量数据源文件(movies_elastic.json)

打开你的movies_elastic.json,找到所有类似这样的行:

{"index": {"_index": "movies2", "_type": "movie", "_id": "1"}}

_type的值改成_doc,也就是:

{"index": {"_index": "movies2", "_type": "_doc", "_id": "1"}}

保存后执行批量导入命令:

curl -H "Content-Type: application/json" -XPOST "http://localhost:9200/_bulk?pretty" --data-binary @movies_elastic.json

方法2:导入时强制指定默认类型(无需修改源文件)

如果不想改源文件,可以在批量导入的URL里直接指定类型为_doc,强制覆盖数据里的类型设置:

curl -H "Content-Type: application/json" -XPOST "http://localhost:9200/movies2/_doc/_bulk?pretty" --data-binary @movies_elastic.json

这样ES会忽略数据里的_type字段,统一使用_doc类型,避免冲突。

验证操作是否成功

完成映射创建和导入后,可以用以下命令检查映射结构:

curl http://localhost:9200/movies2/_mapping?pretty

也可以查询单条数据确认导入正常:

curl http://localhost:9200/movies2/_doc/1?pretty

内容的提问来源于stack exchange,提问作者Revolucion for Monica

火山引擎 最新活动