无法在弹性搜索上创建映射

Cannot create mapping on elasticsearch

我想在 elasticsearch 上创建一个索引,我想创建一个映射。

我对映射的理解是,这是插入数据以定义字段类型之前的一个可选步骤。

索引创建:

curl -X PUT "localhost:9200/idx5"

映射创建:

curl -X PUT "localhost:9200/idx5/_mapping" -H 'Content-Type: application/json' -d'
{
    "properties": {
        "element_type": {
            "type": "keyword"
        }
    }
}
'

现在,我在尝试向索引中插入数据时出现此错误

[type] => illegal_argument_exception
[reason] => Rejecting mapping update to [idx5] as the final mapping would have more than 1 type: [_doc, doc]

如果我不创建映射,我没有错误。

有什么想法吗?

谢谢

** 编辑 **

弹性搜索版本:6.2.4

** 编辑 **

这是我尝试插入数据的方式:

curl -X POST http://localhost:9200/idx5/doc/ -H 'Content-Type: application/json' -d'{
         "id" : "1234",
         "element_type": "TYPE1",
          "title" : "test"
     }
     '

由于您使用的是 Elasticsearch 版本 6.X,它在单个索引中不支持多个 type,默认情况下,如果您不指定它会创建 _doc 类型,因为您在创建索引时没有指定,它将使用 _doc 类型。

现在,在索引而不是使用 _doc 时,您使用的是 doc,这意味着 Elasticsearch 认为您正在为索引使用另一个 type 名称,因为它不受支持 Elastic 抛出错误(甚至在索引中指定类型的名称,在本例中为 doc_doc)。

只需将索引文档请求中的 URL 替换为 http://localhost:9200/idx5/_doc/ 即可。

请阅读 elastic doc for removal of type 什么版本有什么变化。 并且特定于 Elastic 6.X

Indices created in 6.x only allow a single-type per index. Any name can be used for the type, but there can be only one. The preferred type name is _doc, so that index APIs have the same path as they will have in 7.0: PUT {index}/_doc/{id} and POST {index}/_doc