ElasticSearch 7.x 中,插入数据报错

发布于 2022-09-11 19:32:22 字数 2344 浏览 13 评论 0

问题描述

我使用的版本是 7.0.0, 由于 7.x 取消了 Type, 因此我是这么创建索引的:

$ curl -X PUT 'localhost:9200/accounts' -d '
{
  "settings":{
    "number_of_shards": 3,
    "number_of_replicas": 1
  },
  "mappings": { 
    "properties": {
      "user": {
        "type": "text",
        "analyzer": "ik_max_word",
        "search_analyzer": "ik_max_word"
      },
      "title": {
        "type": "text",
        "analyzer": "ik_max_word",
        "search_analyzer": "ik_max_word"
      },
      "desc": {
        "type": "text",
        "analyzer": "ik_max_word",
        "search_analyzer": "ik_max_word"
      }
    }
  }
}'

没有设定 Type(如果我设定 Type 则会报错),返回信息是创建成功:

{
    "acknowledged": true,
    "shards_acknowledged": true,
    "index": "accounts"
}

接下来,我开始插入数据:

$ curl -X PUT 'localhost:9200/accounts/1' -d '
{
  "user": "张三",
  "title": "工程师",
  "desc": "数据库管理"
}' 

却提示我:

{
    "error": "Incorrect HTTP method for uri [/accounts/1] and method [PUT], allowed: [POST]",
    "status": 405
}

好吧,那我就换成 Post 方式咯:

$ curl -X POST 'localhost:9200/accounts/1' -d '
{
  "user": "张三",
  "title": "工程师",
  "desc": "数据库管理"
}' 

但是这样却提示:

{
    "error": {
        "root_cause": [
            {
                "type": "illegal_argument_exception",
                "reason": "Rejecting mapping update to [accounts] as the final mapping would have more than 1 type: [_doc, 1]"
            }
        ],
        "type": "illegal_argument_exception",
        "reason": "Rejecting mapping update to [accounts] as the final mapping would have more than 1 type: [_doc, 1]"
    },
    "status": 400
}

我不知道怎么就『多于一种类型』了。。。

之后我继续尝试,在 es 中,插入数据又分为指定文档id插入自动产生文档id插入,上面的尝试中,我使用了 Put 请求和 Post 请求,做了 指定文档id插入 的尝试,都不成功,于是我又使用 Post 请求,看看能不能 自动产生文档id插入

请求:

$ curl -X POST 'localhost:9200/accounts' -d '
{
  "user": "张三",
  "title": "工程师",
  "desc": "数据库管理"
}' 

响应:

{
    "error": "Incorrect HTTP method for uri [/accounts] and method [POST], allowed: [DELETE, PUT, GET, HEAD]",
    "status": 405
}

我。。。
求教,我现在应该怎么办

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

怎樣才叫好 2022-09-18 19:32:22

Elasticsearch 7.x

  • Specifying types in requests is deprecated. For instance, indexing a document no longer requires a document type. The new index APIs are PUT {index}/_doc/{id} in case of explicit ids and POST {index}/_doc for auto-generated ids.
  • The include_type_name parameter in the index creation, index template, and mapping APIs will default to false. Setting the parameter at all will result in a deprecation warning.
  • The default mapping type is removed.

摘自 removal-of-types

指定ID的API是PUT {index}/_doc/{id}, 自动生成ID的API是POST {index}/_doc。你的请求路径里少了/_doc

半岛未凉 2022-09-18 19:32:22

还是要看官方文档。
README

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文