elasticsearch,query-performance,Indexing,elasticsearch,Query Performance" /> elasticsearch,query-performance,Indexing,elasticsearch,Query Performance" />

Indexing 返回所有结果时,Elasticsearch的速度要慢得多

Indexing 返回所有结果时,Elasticsearch的速度要慢得多,indexing,elasticsearch,query-performance,Indexing,elasticsearch,Query Performance,我在elastic search中存储了大约20000个文档,每个文档大约200kb 我有一个搜索,总共有733次点击,我正在运行,当返回10个结果时,大约需要50毫秒才能完成 如果我将大小设置为1000,以便返回所有结果,则搜索需要3-5秒才能返回 通常我会看到,这是因为它必须继续搜索,直到找到所有这些,这需要额外的时间。然而,当只返回10个结果时,搜索结果仍然显示总共有733次点击,因此它已经知道要返回哪些文档了 请注意,我没有在这里返回_source字段,我只希望它返回_id列表,因此我无

我在elastic search中存储了大约20000个文档,每个文档大约200kb

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

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

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

请注意,我没有在这里返回_source字段,我只希望它返回_id列表,因此我无法想象它必须从磁盘读取更多数据,因为所有的_id肯定都存储在索引中

我是不是在工作中遗漏了什么

(我的ID是我们内部使用的GUID)

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

  • 将_source设置为false,这样现在就不会存储实际文档
  • 将我正在搜索的字段的索引更改为未分析

这就解决了问题,现在我要在50毫秒内把所有733个ID都拿回来。但不确定是哪种变化解决了这个问题。我会把其中一个拿出来重新索引。

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