为什么 elasticsearch 第一次搜索那么慢?

elasticsearch 版本:1.7.1
jdk 版本:1.8.0_60
CPU:Intel(R) Xeon(R) CPU 5110 @ 1.60GHz
内存:4G
elasticsearch 中文档总数:600万
elasticsearch 单机单节点未开复制集

对一个词或者短句进行全文搜索时,第一次的 took 能到四五千毫秒。而之后再搜索该词时,took 就才几十毫秒了。是因为 elasticsearch 将第一次的搜索结果缓存到内存中了吧?但是,每次搜索的关键字相同的概率很低啊,这么慢就意味着不可用啊。

还是开发机性能不行?
又或者必须开多节点?(这么点数据量,应该不至于吧)

阅读 17.6k
3 个回答

配置差不多的机器 我索引了三千万数据 第一次查询 耗时4000以上 楼主查明原因了没?求告知?

自己来回答:

1.机器还是不行,得比较好的服务器配置;
2.无论如何,刚开始都会慢的,我猜测是倒排索引没有载入到内存中。

找了一台很好的公网服务器,建了 1 亿多索引。我写了个 PHP 脚本批量用了 4000 条存在索引的句子随机去全文搜索,平均速度可以达到 75ms。我观察写的日志,前期的查询会比较耗时,最慢的达到 3000ms,后面就快了。而且内存占用也升起来了。我把 java 虚拟机的最大最小内存占用都改为了 8G,机器全部内存是 32G。

新手上路,请多包涵

可能的原因之一是es在加载field data,倒排索引等数据结构,可以使用预加载或者warmer的方式提高查询速度。具体可以参考我写的这篇文章http://www.dcharm.com/?p=521

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏