我正在尝试通过curl命令将数据直接插入以进行弹性搜索到称为“汽车”的特定索引中,但是它经常遇到错误。
curl -XPOST http://elk.local:9200/cars/my_doc -H "Content-Type: application/json" -d @test.json
JSON示例:
{
"name":"John",
"age":30,
"cars":[ "Ford", "BMW", "Fiat" ]
}
错误:
{"error":{"root_cause":[{"type":"illegal_argument_exception","reason":"Rejecting mapping update to [cars] as the final mapping would have more than 1 type: [my_doc, log]"}],"type":"illegal_argument_exception","reason":"Rejecting mapping update to [cars] as the final mapping would have more than 1 type: [my_doc, log]"},"status":400}
任何想法如何正确执行?
答案 0 :(得分:0)
从请求中我看到您正在使用“ GET”插入不正确的数据。改用POST。
答案 1 :(得分:0)
我建议您查看一下映射并进行调整,以便在单个索引中仅一种类型
从ES文档中:
在Elasticsearch 6.0.0或更高版本中创建的索引只能包含一个 单一映射类型。在5.x中创建的具有多个映射的索引 类型将继续像在Elasticsearch 6.x中一样起作用。 映射类型将在Elasticsearch 7.0.0中完全删除。
就您而言,您的汽车索引似乎有 2种类型,一种是my_doc
,另一种是log
,这就是您收到此错误的原因
拒绝将映射更新为[cars],因为最终映射将具有 超过一种类型:[my_doc,日志]
请参阅:https://www.elastic.co/guide/en/elasticsearch/reference/6.0/removal-of-types.html