我想更新所有具有相同名称的文档。我在elasticsearch文档中看到可以使用_update_by_query。所以我试图像这样在我的仓库中实现它:
@Query("{\"script\": { \"inline\": \"ctx._source.name = ?1\"; \"ctx._source.username = ?2\"; \"ctx._source.avatar = ?3\", \"lang\": \"painless\" }, \"query\": { \"match\": { \"name\" : \"?1\" }}")
List<User> update(String name, String username, String avatar);
但是我收到以下错误:nested exception is ElasticsearchStatusException[Elasticsearch exception [type=parsing_exception, reason=[script] query does not support [inline]]]
at org.springframework.kafka.listener.SeekUtils.seekOrRecover(SeekUtils.java:157) ~[spring-kafka-2.5.0.RELEASE.jar:2.5.0.RELEASE]
最佳答案
编辑26.06.2020:
这个答案不正确,我加了一个正确的。
旧的错误答案:
对我来说似乎很奇怪,这个错误来自org.springframework.kafka.listener.SeekUtils
。
要使用脚本进行更新,可以使用update(UpdateQuery updateQuery, IndexCoordinates index)
实例的ElasticsearchOperations
。
要在存储库中拥有此文件,您将需要创建一个存储库自定义项,例如described here。在实现中, Autowiring ElasticsearchOperations
实例。在此定制存储库界面中,您可以定义方法
List<User> update(String name, String username, String avatar);
在实现中,使用脚本和其他信息构建UpdateQuery
对象,并将其传递给ElasticsearchOperations
实例。
关于spring - 通过使用Spring Data Elasticsearch查询多个字段来更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62564829/