multithreading - 如何在一台服务器上配置Elasticsearch集群以获得最佳搜索性能

标签 multithreading search elasticsearch config network-shares

我是Elasticsearch的新手。我的Elasticsearch索引约为300,000个项目。对于另一个表中的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 s甚至更多。

我在google上阅读了一些帖子。人们说创建更多碎片将使搜索变慢。

如何改善搜索查询?

非常感谢!

最佳答案

您将要观看此视频:

http://www.elasticsearch.org/webinars/elasticsearch-pre-flight-checklist/

ES的默认值非常适合开发,但不适用于生产。您真正需要做的一件事是为JVM提供服务器上50%的可用内存。该视频还有很多其他的技巧。

关于multithreading - 如何在一台服务器上配置Elasticsearch集群以获得最佳搜索性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23269280/

相关文章:

elasticsearch - 带有 “must”子句数组的 “match”子句真正含义是什么?

ios - coreData executeFetchRequest 方法的竞争条件导致 nil 数据的问题

multithreading - 我们的 SOLR 实例似乎是单线程的,因此没有利用它的多进程主机

elasticsearch - 如何在使用 Elasticsearch 对 500 万条记录集进行全文搜索时进行增量/搜索

java - 搜索数十或数百个短文本字符串的列表,按相关性排序

java - ElasticSearch JAVA API 查找给定索引的别名

java - Elasticsearch 和 mongodb,部分搜索不起作用

multithreading - C# 应用程序中使用的 C++ WinRT DLL 中出现 "Activating a single-threaded class from MTA is not supported"错误

c - 危险指针: get the local pointer

Django haystack 和 whoosh