【问题标题】:Elasticsearch DSL Query for UpdateElasticsearch DSL 查询更新
【发布时间】:2018-08-10 09:56:43
【问题描述】:

我知道我可以通过http://localhost:9200/[index_name]/[index_type]/[_id] 更新特定文档,但我有文档,其中_id 有# Sense 找不到它们的符号。

了解查询 DSL 将能够执行搜索,我能够在 URL 中指示 _id 而不是。 资源:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-ids-query.html

我可以和你确认一下,我怎样才能更新文档?

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    如果您不想将 ID 放在 URL 中,则唯一的选择是使用 update by query API,如下所示:

    POST index/_update_by_query
    {
      "query": {
        "ids": {
          "values": ["2323#23423"]
        }
      },
      "script": {
        "source": "do some update here"
      }
    }
    

    【讨论】:

    • 感谢您的回复。我使用的是 Elasticsearch 版本 1.3.3,我认为这个版本没有 update_by_query。我使用“index/_update_by_query”,它抛出错误:“InvalidTypeNameException[映射类型名称 [_update_by_query] 不能以'']开始”,状态 400。
    • 在这种情况下,您可以使用适用于 ES 1.3.3 的 update by query 2.2.0 plugin
    • 感谢您的回复。如果 2323#23423 不在索引中,_update_by_query 将无法创建新文档。请问一下新建文档怎么样?
    • 您的问题没有提到有关创建文档(如果丢失)的任何内容。
    • 不,我没有运气。我将创建一个有关创建文档的新问题。感谢您的建议。
    【解决方案2】:

    使用 localhost:9200/index/type/ID%23, %23 作为#

    所以如果 '_id' 为 10,则 url 看起来像 localhost:9200/index/type/10%23

    【讨论】:

    • 用户可能会输入其他特殊字符,所以我想问一下是否有任何解决方法,而不是在 url 上使用 _id。感谢您的回复。
    猜你喜欢
    • 2018-10-17
    • 1970-01-01
    • 2022-12-15
    • 2021-02-08
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多