【发布时间】:2018-02-04 16:50:10
【问题描述】:
我们有一个索引,默认 max_result_window 设置为 10000,但我们的数据正在增加,我们预计那里有超过 100 万个文档,我们的要求是从头到尾滚动所有数据每个史诗都有 1000 个,我们的文档不是很大,我将在下面写一个示例:
{
"serp_query": "c=44444&ct=333333",
"uid": "5815697",
"notify_status": 0,
"created_at": "2018-02-04 10:00:00"
}
我已将 max_result_window 设置为 10,000,000,但此时我们的索引中有近 50K 文档,我已经阅读了一些关于这种增加的后果的文本
高于 的值会消耗大量堆内存 搜索和每个分片执行搜索。离开这个最安全 值,因为它是用于任何深度滚动的滚动 api https://www.elastic.co/guide/en/elasticsearch/reference/2.x/breaking_21_search_changes.html#_from_size_limits
但是我们的文档不是太大,我们的 Elastic Server 有 16GB 的专用 RAM,估计没有问题, 我写信是想问两个问题,
-
根据示例文档(我们所有的文档都应该有相同的字段)对于一百万个文档来说它可能是多大的,我的意思是需要多少堆内存来处理这个?
李> 这是不是很糟糕的解决方案,将来会给我们带来很大的问题吗?我们是否使用滚动而不是偏移并开始?
我们的查询不是很复杂,对所有按“created_at”降序排序的数据进行循环,在每个史诗中得到 1000 个文档。
仅供参考:我们在 2.7 中的弹性搜索引擎版本
【问题讨论】:
-
滚动不应用于实时搜索请求。您可能应该调查
search_afterfeature。 -
@Val 感谢您的关注,您知道大小吗?你认为我们的解决方案是 tribble 吗?
-
即使它可以工作,你最终也会遇到这样的情况:它不再有效,你必须重构它。因此,最好的办法是确保您实施的解决方案是持久的,这样您就可以专注于其他增值的东西。
-
最好的办法就是尝试一下。使用生产数据加载索引(8 相同映射,相同数量),然后尝试加载测试该索引并查看会发生什么。如果它适合你,那就去吧。 Elastic 发出一般警告,警告不要增加窗口大小,但这并不意味着它永远不会对任何人起作用。每个人的设置都不一样,所以它肯定适合你。经过一些严肃的测试,除了你之外,没有人能说出来。
-
@Rakmo 因为我们的查询不是很复杂而且我们的文档很简单,希望我们在增加它时没有问题:)
标签: elasticsearch