我正在尝试使用自动生成的文档ID在名为uploads的索引中创建一个新的Elasticsearch文档。我是通过将新文档发布到/uploads/_doc/
来实现的。不过,Elasticsearch拒绝上传,因为它返回状态为400 Bad Request的HTTP响应。
Elasticsearch认为我正在尝试创建新的映射类型,因为响应正文中的错误消息是
拒绝将映射更新更新为[上传],因为最终映射将具有1种以上的类型:[_ doc,上载]
我不尝试创建新的映射类型。我知道each index may now hold only one mapping type。
我在Debian上使用Elasticsearch 6.4.2。我正在使用libcurl发送HTTP请求并接收HTTP响应。
为什么Elasticsearch将我的请求解释为尝试添加映射类型的尝试?如何更改我的工作以代替创建新文档。
使用curl
显示索引当前具有一种映射类型,称为uploads
:
curl http://localhost:9200/uploads?pretty
{
"uploads" : {
"aliases" : { },
"mappings" : {
"uploads" : {
"properties" : {
...
}
}
},
"settings" : {
"index" : {
...
"provided_name" : "uploads"
}
}
}
}
答案 0 :(得分:2)
您正在张贴错误的URL。该URL必须提供索引名称和文档类型,而不是使用_doc
。
根据映射,您的uploads
索引具有uploads
文档类型:
{
"uploads" : { <--- index name
"aliases" : { },
"mappings" : {
"uploads" : { <-----doc_type name
"properties" : {
...
}
}
}
因此,您应该使用此文档类型,而不要使用_doc
。也就是说,POST到/uploads/uploads
,而不是/uploads/_doc
。