问题标签 [update-by-query]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
elasticsearch - Update By Query API 是在 elasticsearch 中更新单个文档的好选择吗?
我有一个用例,我想在不知道其索引的情况下更新文档。目前我正在通过 id 查询并获取索引然后更新(2 操作)。Update By Query API 似乎在单个操作中执行此用例。但我只是持怀疑态度,因为根据 Elasticsearch 文档,
由于会有很多更新,只是想知道使用_update_by_query
单个文档时是否会比使用 _update API 获取和更新会产生性能开销。
java - ElasticSearch by _update_by_query 如何更新 XContentType.JSON 类型字段
我在 ES 中存储了这样的模式:
这里 userId123 是 _id。我想更新 userPhoneInfo。它可以为 null 或具有 json 值。下面 _update_by_query 适用于这两种情况
在java中,我使用了以下脚本和parmas:
但得到这个例外:!org.elasticsearch.ElasticsearchException: Elasticsearch 异常 [type=null_pointer_exception, reason=null] !在 org.elasticsearch.ElasticsearchException.innerFromXContent
如果我使用这样的脚本和参数
得到这个例外!java.lang.IllegalArgumentException:无法为类型类 com.ffb.pno.dtos.listingMeta.PPUAttributes 的未知值写入 xcontent!在 org.elasticsearch.common.xcontent.XContentBuilder.unknownValue
请帮助我我做错了什么
elasticsearch - Python Elasticsearch update_by_query 不起作用
我想在 elasticsearch.py(版本 7.13.1)中使用 update_by_query 更新多个文档
我的查询是:
我已经尝试过匹配以及必须查询,但是文档没有得到更新,没有这样的错误。
我得到的回应是这样的:
如果我在 Kibana 上运行相同的查询,它会按预期工作。我在这里想念什么?
elasticsearch - 为什么批量更新永远不会与 Elasticsearch 中的按查询更新请求冲突
我保持两个脚本运行,一个向索引发送批量请求:
另一个在这些文档上发送更新查询请求(我必须在每个请求之后睡觉,因为如果请求发送得太频繁,它可能与前一个请求冲突):
从两个脚本的输出来看,批量响应没有冲突失败。所有冲突都发生在按查询更新方面。
根据冲突错误消息:version conflict, required seqNo [66], primary term [1]. current document has seqNo [67] and primary term [1]
,似乎是在将操作从主分片复制到副本时发生冲突。但是bulk也需要这样做并增加seqNo,对吧?
是否有可能按查询更新成功但有时会发生批量冲突和失败?
elasticsearch - 将 geoIP 数据添加到 Elasticsearch 索引中的旧数据
我最近在 Elasticsearch 的摄取管道中添加了一个 GeoIP 处理器。这很好用,并为新摄取的文档添加了新字段。我想通过对索引执行 _update_by_query 将 GeoIP 字段添加到旧数据中,但是,它似乎不接受“处理器”作为参数。
我想做的是这样的:
我收到以下错误:
python - 使用 dict 更新所有 elasticsearch 文档以使用 Python 进行输入
更新所有文件
背景资料
我有一个用例需要更新索引中的所有文档。我的来源类似于以下内容:
我可以使用 multi_match 查询轻松搜索我的索引,但这是针对单个 ID。
我想提供一个字典和字段列表作为参数来更新我的索引。
例子:
字典包含 old_ids 到 new_ids。我想更新每个具有旧 ID 的字段。
我的解决方案(到目前为止)
我编写了一个简单的脚本来更新 id,但是它需要每个字段的 for 循环。脚本所做的是逐个循环遍历每个字段。如果列表中的当前项目与我们的参数“fromId”匹配,我们将“toId”附加到列表中,否则将当前项目添加到列表中并继续。然后我们将该字段设置为等于新列表。
无痛脚本示例
这可以通过elasticsearch_dsl
库中的 UpdateByQuery 执行。
更新调用的示例。
创建一个中间函数来对单个 ID 执行更新,并使用重试装饰器进行包装。
问题
这样做需要我一个一个地遍历我的字典来执行更新。
如果我想增加我们想要更新的字段数量,我需要添加一个新的 for 循环。
问题
根据上述内容更新源中所有字段的最佳/最佳解决方案是什么?
有没有办法发送字典来查找与键匹配的所有文档,并在一次调用中使用值进行更新?