我正在尝试从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的单次调用将分页浏览所有结果集,并将每一页作为一个流文件引入。这不正确吗?
最佳答案
请将排定时间减少到10-20秒左右。因此,处理器将在每10-20秒内根据您的页面大小获取下一组记录。
您可以在获取过程进行时检查状态值,即可以在其中找到滚动ID。提取过程完成后,状态值将更改为“finishedQuery”:true。
关于elasticsearch - 在NiFi中使用 “ScrollElasticSearchHttp”处理器时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60079799/