Elasticsearch是否会对查询结果进行流式处理"计算"或者是否计算所有内容然后将最终回复返回给客户?
答案 0 :(得分:5)
默认情况下,elasticsearch只会为查询返回一组有限的结果。 (即,搜索*将仅返回默认计数集,而不管匹配的数量)。
一般来说,为了实现“流式传输”,您需要进行初始搜索以获取匹配文档的总数,然后查询范围内的文档(即前10个,后10个等)。
见
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-from-size.html
如何请求返回的文件数量。
答案 1 :(得分:1)
您是否尝试过滚动查询?
https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-scroll.html比分页更容易处理。
滚动不是针对实时用户请求,而是针对处理大量数据,例如为了将一个索引的内容重新索引到具有不同配置的新索引中。
答案 2 :(得分:1)
不,到目前为止,Elastic 不支持此功能。 Elastic API 使用传统的请求/响应模型。查询结果被分页,在服务器端缓存,然后发送回客户端。以流式方式真正读取响应正文似乎不在 Elastic 路线图中。
话虽如此,对于大的结果集,滚动 API 已被弃用,而且从未用于实时用户查询。目前最好的选择是 search_after,它可以被视为传统 RDBMS 中的游标。
答案 3 :(得分:0)
回答评论中的问题:
因此,问题是出口大型结果的正确方法 “报告”类型系统?我不是在谈论前端?我在说话 关于将执行自定义查询的后端应用程序 使用300000 +结果
构建一个文件
我确信可能有正当理由这样做,但对我而言,这听起来像是你用锤子来驱动螺丝。使用elasticsearch的重点是使用它的聚合功能在数据存储中进行更多的计算。
如果你真的需要300000条记录的原始数据,那就是你需要的。但是,如果它是一个报告,则意味着您正在对数据进行一些操作以进行度量。 ES的重点在于它允许您即时构建“自定义报告”。我怀疑将尽可能多的逻辑放入查询中更快,而不是简单地操纵原始数据。
在不了解更多要求的情况下,我无法提出更好的答案。