【发布时间】:2014-06-09 18:15:36
【问题描述】:
我是弹性搜索的新手。我有一个大约 300,000 个项目的 Elasticsearch 索引。对于另一个表中的 6000 万条记录中的每一条,我都需要对这个 ES 索引进行复杂的查询。
现在,它非常慢(进行 1000 次查询需要 200 秒)。我需要有关如何配置我的 elasticsearch 集群以处理大量查询的建议。
我的服务器:
8 core
8GB ram
SSD Hardware
我想配置 elasticsearch 来处理来自 ruby 的 1000 个并发搜索请求。 (我想并行搜索 1000 个项目)。
我已尝试使用默认配置
我认为默认情况下,elasticesearch 只能处理大约 10-20 个并发搜索请求。它使用很少的cpu和ram。因此,我认为我可以改进它。
我只能从 ruby 运行 100 个线程来搜索 1000 个项目,并且大约需要 200 秒。如果我从 ruby 增加到 1000 个线程,ES 会返回超时错误消息。
我运行一个主节点
ES_HEAP_SIZE=2G
indices.fielddata.cache.size: 1g
threadpool:
search:
type: fixed
size: 200
queue_size: 400
shares: 5
replicas: 1
从 ruby 运行 100 个线程来搜索 1000 个项目仍然需要 200 秒。
我在此服务器上添加了 3 个新节点作为数据节点。
从 ruby 运行 100 个线程来搜索 1000 个项目仍然需要 200 秒或更长时间。
我用谷歌搜索并阅读了一些帖子。人们说创建更多分片会使搜索变慢。
如何改进我的搜索查询?
非常感谢!
【问题讨论】:
-
您能提供您的搜索查询吗?
-
正如您提到的,通过对配置的最小更改,查询性能得到了提高,如果您可以在更改后分享更改和性能,将会很有帮助
-
@gsuresh92:我大约一年前完成了这项任务,所以我现在没有详细信息。我可以分享一些关键点:将
/etc/security/limits.conf的最大打开文件增加到 65k 或 100k。将机器上的ES_HEAP_SIZE增加到 50% 内存。如果你想改进并行搜索,你可以增加threadpool.search.size。当您增加此值时,您可能会看到许多查询失败,因此增加threadpool.search.queue_size可能会有所帮助,但查询的平均时间会增加 -
@gsuresh92:我建议检查以下答案中的链接。对我当时使用 ES Cluster 很有帮助
-
@MinhHa 非常感谢 :)
标签: multithreading search elasticsearch config network-shares