因此,我们的生产环境有一个es集群,它包含所有产品库存(id和属性),其中每个产品都Map到一个文档。在内部,我们的一个用例是基于这些产品属性的文本匹配来创建这些产品的逻辑分组。
很多时候,一个产品集可能包含大量的产品,比如说,500万个。也就是说,创建产品集的查询可以匹配大约500万个文档。
现在,我的问题是,es是否能够处理如此大的文档检索,还是建议使用cassandra或hbase之类的备份存储来获取大量文档?请注意,我不关心实时用例—我可以异步执行产品集创建,因此延迟不是我主要关心的问题。据我所知,es提供了scrollapi来检索大量文档,但是,我更多地从一个学派的Angular 来处理这个问题。
使用es获取500-1000万范围内的非常大的文档可以吗?或者我们应该使用一个具有大数据功能的并行数据库来获取数据,并且只使用es作为搜索存储?
1条答案
按热度按时间vwkv1x7d1#
热释光;不,它并不意味着要检索大量的文档,尽管你可以用不同的方法来处理
请注意,scroll api可能不适用于除重新索引以外的其他用途:
滚动并非用于实时用户请求,而是用于处理大量数据,例如为了将一个数据流或索引的内容重新索引为具有不同配置的新数据流或索引。
另一种实现方法是搜索参数
search_after
不是一个可以自由跳转到随机页面的解决方案,而是可以并行滚动许多查询。它与scroll
但与之不同的是search_after
参数是无状态的,它总是根据搜索程序的最新版本进行解析。因此,根据索引的更新和删除,排序顺序可能会在漫游过程中更改。重新考虑您的用例是否真的需要对大量文档进行彻底的分页。因为elasticsearch的优势并不在于庞大的结果集。
查阅文件:
对搜索结果分页
index.max\结果\窗口
跟踪总点击率
滚动api
搜索参数