spring - 通过使用Spring Data Elasticsearch查询多个字段来更新?

标签 spring elasticsearch spring-data spring-data-elasticsearch

我想更新所有具有相同名称的文档。我在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/

相关文章:

elasticsearch - 如何使用 curl 删除 Elasticsearch 中的 arraylist 值?

java - Elasticsearch Java TermVectorRequest (_termvector)

spring-boot - Spring Data JPA 错误 : InvalidDataAccessApiUsageException: HOUR_OF_DAY: 0 -> 1

hibernate - 非键列的@OneToOne 映射

java - 如何在 Mongo Async Java Driver 上实现多线程?

Spring 安全 : JWT token for API and session for web

sql - SQL查询的 Elasticsearch 替代方案?

spring - 在同一事务中保存后更新期间不会调用 @PreUpdate

spring - 为什么 ThreadPoolTask​​Scheduler 不支持 Callable 的调度

java - org.springframework.orm.hibernate3.HibernateSystemException : a different object with the same identifier value was already associated with the session