返回所有结果时,Elasticsearch要慢得多

时间:2014-03-18 09:47:28

标签: indexing elasticsearch query-performance

我在弹性搜索中存储了大约20,000个文档,每个文档大约200kb。

我的搜索总共有733次点击,我正在运行,在返回10个结果时需要大约50毫秒才能完成。

如果我将大小设置为1000以便返回所有结果,则搜索需要3-5秒才能返回。

通常我会看到这是因为它必须继续搜索,直到找到所有这些,这需要额外的时间。然而,当仅返回10个结果时,搜索仍然总共说出733次点击,因此它已经知道要返回哪些文档!

请注意,我没有在这里返回_source字段,所有我想要的是_ids列表,所以我无法想象它必须从磁盘读取更多数据,因为所有_ids都是无论如何肯定存储在索引中。

我错过了一些有效的方法吗?

(我的_ids是我们内部使用的guids。)

编辑:自发布以来,我通过对映射的两次更改重新编制索引:

  • 将_source设置为false,因此现在不存储实际文档。
  • 将我搜索的字段的索引更改为not_analyzed。

这解决了这个问题,现在我在大约50毫秒内恢复了所有733 _ids。不知道哪个改变解决了它。我将其中一个退出并重新编制索引。

1 个答案:

答案 0 :(得分:0)

需要时间。因为它需要从ES获取所有数据并计算查询的分数。 尝试 1)将字段设置为不分析您要搜索的字段。 2)将ES的商店类型从simplfs更改为mmaps ..(在elasticsearch.yml中提及“index.store.type:mmaps”..) 3)尽可能少配置碎片。碎片更多必须等于移动你要使用的节点..