因此,我们的生产环境有一个ES集群,其中包含我们所有的产品库存(ID和属性),其中每个产品都映射到一个文档。在内部,我们的一个用例是根据这些产品属性中的一组文本匹配来创建这些产品的逻辑分组。
通常情况下,一个产品集可能包含非常多的产品,比如500万个。也就是说,创建产品集的查询可以匹配大约500万个文档。
现在,我的问题是,ES是否能够处理如此大的文档检索,或者是否建议使用像Cassandra或HBase这样的后备存储来获取大量的文档?请注意,我不关心实时用例-我可以异步执行产品集创建,所以延迟对我来说不是主要问题。据我所知,ES提供了检索大量文档的Scroll API,但是,我更多地是从思想流派的角度来处理这个问题。
是否可以使用ES来获取非常大的文档,范围在500万到1000万之间?或者,我们是否应该使用具有大数据功能的并行DB来获取数据,并仅使用ES作为搜索存储?
发布于 2020-09-02 00:07:37
TL;DR no,它并不意味着要检索大量的文档,尽管您可以使用不同的方法
请注意,Scroll API might not be suitable for purposes other than re-indexing
滚动不是用于实时用户请求,而是用于处理大量数据,例如以便将一个数据流或索引的内容重新索引到具有不同配置的新数据流或索引中。
实现它的另一种方法是Search after parameter
search_after不是一种可以自由跳转到任意页面的解决方案,而是可以并行滚动多个查询的解决方案。它与搜索器API非常相似,但与之不同的是,search_after参数是无状态的,它总是针对最新版本的scroll进行解析。因此,在遍历过程中,排序顺序可能会根据索引的更新和删除而改变。
重新考虑您的用例是否真的需要对大型文档集进行详尽的分页。因为ElasticSearch的优势并不在于大的结果集。
请参阅文档:
https://stackoverflow.com/questions/63689309
复制相似问题