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

时间:2018-05-23 22:06:30

标签: debugging elasticsearch lucene

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

我试图看看我是否可以在我的系统中进行一些优化,这主要是一个磁盘重的系统,以加快查询性能。 我查看了ES代码,并了解QueryPhase是最昂贵的,并且它似乎对我所拥有的面向日志的数据进行了大量的随机访问磁盘。

我现在想深入了解lucene级别,并可能调试代码并查看实际操作。 Lucene代码对于IndexReader相关类没有任何日志消息。直接调试lucene代码似乎没有用,因为unittest不用tim,doc,nvd,dvd文件创建索引

任何指针?

1 个答案:

答案 0 :(得分:0)

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

(见http://lucene.apache.org/core/7_2_1/core/org/apache/lucene/codecs/lucene70/package-summary.html#package.description):

  1. 术语索引(.tip) #ON MEMORY
  2. 术语词典(.tim)#ON DISK
  3. 频率(.doc) #DIS DISK
  4. 每个文档值(.dvd,.dvm),对聚合非常有用。 #ON DISK
  5. 字段索引(.fdx) #ON MEMORY
  6. 字段数据(.fdt),最后在这里从磁盘获取数据。 #ON DISK
  7. 有一点可以选择性能:

    1. 尝试使用小日期类型,例如:INTEGER或LONG值而不是STRING。
    2. 在不必要的字段上关闭DocValues,同时在该字段上打开您想要排序/聚合的DocValues。
    3. 只是在源头上包含必要的字段,例如" _source":{"包括":[" some_necessasy_field"]}。
    4. 仅使用ES定义映射的索引字段。
    5. 将您的数据拆分为多索引。
    6. 添加SSD。