Elasticsearch拒绝文档上传,因为它试图创建新的映射类型

时间:2018-12-07 12:15:45

标签: elasticsearch

我正在尝试使用自动生成的文档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"
      }
    }
  }
}

1 个答案:

答案 0 :(得分:2)

您正在张贴错误的URL。该URL必须提供索引名称和文档类型,而不是使用_doc

根据映射,您的uploads索引具有uploads文档类型:

{
  "uploads" : {                   <--- index name
    "aliases" : { },
    "mappings" : {
      "uploads" : {              <-----doc_type name
        "properties" : {
        ...
        }
      }
    }

因此,您应该使用此文档类型,而不要使用_doc。也就是说,POST到/uploads/uploads,而不是/uploads/_doc