elasticsearch - 除了Elasticsearch中的反向索引(它使搜索如此之快)外,内存中还加载了什么?

标签 elasticsearch elastic-stack elasticsearch-5

Elasticsearch内存中有哪些东西可以使搜索如此快速?
是所有json本身都在内存中,还是仅倒排索引和映射将在内存中24 * 7?

最佳答案

这是一个很好的问题,然后简而言之就是:

不仅仅是数据存储在内存中,Elasticsearch的搜索速度如此之快

不能保证倒排索引总是存储在内存中。我没有找到直接的证明,所以我从以下推断:

  • 索引段可能未完全加载到内存中(请参见 _cat/segments 输出参数size.memory)
  • Tune for search speed中的第一个建议是:

    Give memory to the filesystem cache


  • 这意味着Elasticsearch还以非常智能的方式将索引数据存储在磁盘上,因此文件系统本身可以通过经常可访问的搜索来帮助它。

    这样的“生活黑客”之一是,对于映射中的每个字段,都有一个不同的倒排索引,如果频繁查询,倒排索引将足够小以被FS有效地缓存(并且您从未查询过的字段只会占用磁盘空间)。

    那么Elasticsearch会在内存中存储原始JSON吗?

    不,它将它们存储在名为 _source 的特殊字段中。检索它并不很快,这就是为什么scripts访问_source的执行速度可能会很慢的原因。

    还有其他使Elasticsearch快速运行的数据结构吗?

    是的,例如,用于聚合的那些:
  • doc_values ,是精确值字段的面向列的存储(此功能使Elasticsearch有点Columnar DB),但是它又不是最初在内存中,并且在频繁使用时会被“缓存”;
  • fielddata ,除了text字段外,执行类似的工作;它实际上存储在内存中,但是效率不高,默认情况下处于关闭状态。

  • Elasticsearch还可以做什么来加快搜索速度?

    它使用更多的缓存:Shard request cachingNode query cache。如您所见,它并不像“仅将数据放入内存”那样简单。

    希望有帮助!

    关于elasticsearch - 除了Elasticsearch中的反向索引(它使搜索如此之快)外,内存中还加载了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53624581/

    相关文章:

    Elasticsearch 批量 API - 意外的输入结束 : expected close marker for ARRAY

    每次重启时elasticsearch数据都会增加和重复

    python - python elasticsearch:如何在所有字段上查询字符串

    nginx - 使用两个配置文件时的Logstash混合输出

    elasticsearch - 如何在Elastic Search中结合过滤器编写嵌套查询?

    elasticsearch - 一个查询中每个映射的不同多重匹配

    elasticsearch - Elasticsearch `scan`和 `scroll`之后的文档计数不正确,然后 `refresh`和 `flush`

    elasticsearch - Logstash:错误:未加载mongodb.jdbc.MongoDriver

    search - Elasticsearch:在列表中搜索字段 null OR

    c# - 使用自定义分析器索引文档时超时