elasticsearch,lucene,Debugging,elasticsearch,Lucene" /> elasticsearch,lucene,Debugging,elasticsearch,Lucene" />

Debugging Elasticsearch lucene,了解搜索的代码路径

Debugging Elasticsearch lucene,了解搜索的代码路径,debugging,elasticsearch,lucene,Debugging,elasticsearch,Lucene,我想了解如何在ES查询中使用每个lucene索引文件(nvd、dvd、tim、doc..主要是这四个)。 例如,假设我的索引有十个文档,我正在进行聚合查询。我想了解ES/Lucene如何通过单个查询访问这四个文件 我正在试着看看我的系统是否可以进行一些优化,因为我的系统主要是一个磁盘繁重的系统,以提高查询性能。 我查看了ES代码,了解到QueryPhase是最昂贵的,它似乎对我拥有的面向日志的数据进行了大量的随机磁盘访问 我现在还想深入研究lucene级别,并可能调试代码并查看实际情况。Luce

我想了解如何在ES查询中使用每个lucene索引文件(nvd、dvd、tim、doc..主要是这四个)。 例如,假设我的索引有十个文档,我正在进行聚合查询。我想了解ES/Lucene如何通过单个查询访问这四个文件

我正在试着看看我的系统是否可以进行一些优化,因为我的系统主要是一个磁盘繁重的系统,以提高查询性能。 我查看了ES代码,了解到QueryPhase是最昂贵的,它似乎对我拥有的面向日志的数据进行了大量的随机磁盘访问

我现在还想深入研究lucene级别,并可能调试代码并查看实际情况。Lucene代码没有IndexReader相关类的日志消息。另外,直接调试lucene代码似乎也没有什么帮助,因为unittest不使用tim、doc、nvd和dvd文件创建索引


有什么建议吗?

据我所知,ES在搜索细节方面做得不多,如果您想优化搜索,我的经验是优化您的数据布局,以下是一些重要的lucene文件说明:

(见):

  • 关于记忆的术语索引(.tip)
  • 术语词典(.tim)#在磁盘上
  • 磁盘上的频率(.doc)
  • 每文档值(.dvd、.dvm),在聚合方面非常有用#在磁盘上
  • 内存上的字段索引(.fdx)
  • 字段数据(.fdt),最后从这里的磁盘获取数据#在磁盘上
  • 还有一些要点可以优化性能:

  • 尝试使用小日期类型,例如:整数或长值而不是字符串
  • 关闭不必要字段上的DocValues,同时打开要排序/聚合的字段上的DocValues
  • 只需在源代码上包含necessay字段,如“_source”:{“includes”:[“some_necessay_field”]}
  • 使用ES定义的映射只需要索引字段
  • 在多索引上拆分数据
  • 添加SSD