【发布时间】:2020-07-24 14:19:24
【问题描述】:
我正在尝试从 ElasticSearch 中的索引中检索数据。我配置了“QueryElasticSearchHttp”处理器,它工作得很好。但是,当我尝试使用具有相同 URL、查询、索引属性的 ScrollElasticsearchHttp 处理器并将“滚动”设置为默认 1 分钟时,它不起作用。
我收到 404 错误响应:“Elasticsearch 返回代码 404 和消息未找到”。 我也在跟踪 ES 集群上的日志,我看到了这个错误;
[DEBUG][o.e.a.s.TransportSearchScrollAction] [2] Failed to execute query phase
org.elasticsearch.transport.RemoteTransportException:[127.0.0.1:9300][indices:data/read/search[phase/query+fetch/scroll]]
Caused by: org.elasticsearch.search.SearchContextMissingException: No search context found for id [2]
at org.elasticsearch.search.SearchService.getExecutor(SearchService.java:457) ~[elasticsearch-7.5.2.jar:7.5.2]
我使用的是 Apache NiFi 1.10.0
这是处理器的配置: 我应该看到总共 441 次点击,并且页面大小为 20,我应该看到对 ES 进行了 23 次查询。 但我没有得到任何结果。我为“滚动”尝试了更高的值,也尝试了“页面大小”但无济于事。
我还注意到,即使 ScrollElasticsearchHttp 处理器设置为每 1m 运行一次,但在 ES 日志中我看不到每分钟重复的任何错误日志。
更新:
当我通过 UI 清除状态时:“查看状态”->“清除状态”,我能够进行一次调用,在一个流文件中返回一个充满点击的页面。 但是,还有更多页面需要检索。如何让处理器去获取下一页?
我的理解是 ScrollElasticsearchHttp 的单次调用将遍历所有结果集并将每个页面作为一个流文件引入。这不正确吗?
【问题讨论】: