针对大型服务器/服务器集群的Elasticsearch模糊匹配优化



我有一个索引,上面运行着非常复杂的查询。主要的减速是模糊查询,它针对每个记录包含2-5个单词的字段运行。我主要需要查找具有1-3个不同字符的行。

在我的4核(带HT)和8GB ram机器上,我的查询分别在大约1-2秒内执行。在具有12个核心(带HT)和72Gb RAM的服务器上,查询在0.3-0.5秒内执行。在我看来,这并不是对所提供硬件的合理扩展。我确信应该有一些隐藏的选项供我调整查询性能。

我浏览了弹性搜索指南,但找不到任何可以帮助我根据CPU或RAM的数量调整性能的东西,也找不到专门针对模糊查询调整弹性的东西。

另一个问题是,如果我像这样添加另一个服务器,它的规模会如何?查询时间大约会小两倍吗?

这里有几种可能性。首先,您的查询是I/O绑定的。在这种情况下,只添加另一个服务器可能会有所帮助,因为两个节点将从两个磁盘检索数据。另一种可能性是您的查询受CPU限制。在很大程度上,针对单个碎片的搜索是一个单线程过程。假设你的索引是用默认设置创建的,它有5个碎片。因此,在5个以上的CPU上运行查询不会带来显著的好处。在这种情况下,由于网络开销,添加另一个节点只会减慢速度。相反,您需要用更多的碎片重新创建索引。

最新更新