Hibernate-search elasticsearch数据索引是同步还是异步

Hibernate-search elasticsearch data indexing is synchronous or Asynchronous

我们正在项目中实施 hibernate-search elasticsearch,需要澄清一下。

在em.persist之后如果事务被提交,数据是以同步方式还是异步方式被索引到elasticsearch中。基本上 return 方法会在 em.persist 提交之后,或者它会确保数据在 elasticsearch 中被索引。在下面的视频https://www.youtube.com/watch?v=_NGnbON3xAo 17:30 中,我听说数据被放在一个队列中,并在db commit 后在es 中批量索引。因此,如果 elasticsearch 索引由于某种原因失败,我可能想实施手动数据库回滚,以便数据在两个商店中处于一致状态

提前致谢

数据在提交时发送到 Elasticsearch,根据您的设置同步或异步。

如果您有兴趣更改这些设置,请查看文档:https://docs.jboss.org/hibernate/stable/search/reference/en-US/html_single/#configuration-worker

编辑: 此外,即使在同步模式下,Elasticsearch 也是 "near-real-time",这意味着即使更改已被处理,它们也不会可见,直到一个小的更改后的一段时间。所以你也可以看看 hibernate.search.default.elasticsearch.refresh_after_write 配置设置。来自文档:

Whether to perform an explicit refresh after a set of operations has been executed against a specific index (true or false)

hibernate.search.default.elasticsearch.refresh_after_write false (default)

This is useful in unit tests to ensure that a write is visible by a query immediately without delay. This keeps unit tests simpler. You should not rely on the synchronous behaviour for your production code except in rare cases as Elasticsearch is optimised for asynchronous writes: leave at false for optimal performance.