Flexmonster对接Elasticsearch全量数据获取机制及相关问题咨询
问题解答
1. 直接访问URL仅返回前10条数据的原因
Elasticsearch的_search接口默认size参数值为10,直接通过浏览器GET访问该URL时,没有指定任何自定义查询参数,因此ES返回默认数量的结果。而Flexmonster在请求时会自动配置查询参数:要么调大size值,要么使用ES的滚动查询(Scroll API)分批拉取全量数据,以此绕过默认的数量限制。
2. 为何会产生两个请求
第一个OPTIONS请求是浏览器的跨域预检请求:如果Flexmonster所在的前端页面,和你的Elasticsearch服务(localhost:9200)不在同一域名/端口下,浏览器会先发送OPTIONS请求,确认ES服务器是否允许跨域的POST请求(包括允许的请求方法、自定义头等规则)。只有预检请求通过后,浏览器才会发送第二个POST请求,执行实际的数据查询操作。
3. 如何复刻Flexmonster获取全量数据的操作
你的数据量达270万条,远超Elasticsearch默认的max_result_window(10000条),不能直接通过设置size=2700000获取,必须用**滚动查询(Scroll API)**分批拉取,步骤如下:
- 第一步:初始化滚动查询
发送POST请求到http://localhost:9200/jolanda_map/_search,请求体示例(可从浏览器开发者工具中复制Flexmonster实际使用的查询体替换):
{ "scroll": "1m", "size": 1000, "query": { "match_all": {} } }
scroll指定滚动会话的有效期(比如1分钟),size是每次返回的数据量,query根据你的业务需求调整。请求成功后会返回第一批数据,同时返回_scroll_id字段。
- 第二步:循环拉取剩余数据
每次使用上一步得到的_scroll_id,发送POST请求到http://localhost:9200/_search/scroll,请求体示例:
{ "scroll": "1m", "scroll_id": "上一步返回的scroll_id值" }
重复此步骤,直到返回结果中的hits.hits数组为空,说明全量数据已拉取完成。
内容的提问来源于stack exchange,提问作者Stefano Sorgente
相关产品推荐
相关产品推荐

