我们的数据集如下:
文档经常每天更新一次。
查询非常简单:主要是geo和term(s)过滤器。 对于ES标准,请求的数据集非常大(每次搜索请求100到1000个文档)。
请求时间比预期慢,大多数请求的时间超过200毫秒。 监控工具显示节点完全正常:
elasticsearch's cluster monitoring
节点配置是标准配置。我们只将bootstrap.memory_lock: true
添加到默认设置。
为了加快搜索速度,首先要做的是什么?索引时间不是问题。如果更快的搜索意味着索引时间更慢,那么一切都很好。
我的第一个猜测是玩碎片的数量?还有什么?
答案 0 :(得分:1)
我会采取以下措施来缩小/排除问题的可能原因:
答案 1 :(得分:1)
快速计算:800万个文档可以创建150GB的数据(主分片),因此平均文档大小约为19KB?如果你在最糟糕的情况下得到1000,那就是19MB。我有点惊讶它只需要200ms ......
200ms是结果集中took
的时间还是已经在客户端上了?无论如何,看看查询对10个结果需要多长时间会很有趣。我想知道你是否真的需要很快的结果。
是的,你的分片数量有点高(10可能更好,甚至可能是5),但你需要测试实际产生的差异。