如何使用curl命令直接插入JSON数据进行弹性搜索?

时间:2018-12-09 09:30:17

标签: elasticsearch

我正在尝试通过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}

任何想法如何正确执行?

2 个答案:

答案 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