java - Elasticsearch 索引后执行外部操作

标签 java spring elasticsearch nutch elasticsearch-5

我目前正在将网页索引到elasticsearch。索引是通过 java (Spring) 和 Apache Nutch 完成的。

我遇到了一种情况,在elasticsearch中索引或更新文档后,我必须调用外部API。 API 处理索引中的字段值,并将处理结果存储在另一个字段的同一索引中。我在索引之前尝试了 API 调用,它会影响索引性能(花费太多时间)。我必须在不影响索引或更新elasticsearch文档的情况下调用外部API。

寻找一些想法。

我使用的是elasticsearch版本5.6.3

最佳答案

目前 ES 不支持与您需要的类似的“通知系统”( https://discuss.elastic.co/t/notifications-from-elasticsearch-when-documents-are-added/5106/31 ),由于 ES 的分布式特性,这在大多数情况下是不切实际的。

我认为更简单的方法是插入 Kafka/RabbitMQ(队列),您可以将 ES 索引器作为此队列中的工作人员,然后该工作人员将是向不同队列发送消息的理想位置,表明文档 X 已准备好丰富(添加更多元数据)。而且在这种情况下,您不必担心会减慢系统的索引速度(您可以添加更多 ES 索引器)。您也不需要不断查询 ES 来丰富您的文档,因为您可以将所需的字段(或多个字段)与 ES id 一起发送给丰富工作人员,他们将在调用外部 API 后直接更新该文档)。请记住,也许其中一部分可以包含在自定义 ES 插件中。

这样做的优点是您可以分别缩放两个位置(ES 索引器/元数据丰富器)。

其他选项可能是使用一些外部模块来查询 ES 中尚未通过外部内容丰富的文档 block ,然后您可以调用外部 API,然后将文档更新回 ES。

关于java - Elasticsearch 索引后执行外部操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48494762/

相关文章:

java - 使用 jlabel 上的 imageicon 自动调整图像大小

Spring 数据 jpa 规范 : How to filter a parent object by its children object property

Spring Boot (Spring Data JPA) - 配置PostgreSQL只读副本

elasticsearch - 尝试聚合时获取 “Field data loading is forbidden”

elasticsearch - NEST - 如何进行多重嵌套聚合?

elasticsearch - Elasticsearch对字段的分析未按预期工作

java - 为文档添加权重 Lucene 8

java - 如何使用 x.509 签名/证书签署 PDF

java - 在 AsyncTack 中使用 ProgressDialog 从扩展 Application 的类中调用

Spring 无法处理返回泛型内部 Kotlin 类的方法