搜索引擎优化书籍(Elasticsearch的底层索引工具为Lucene进行索引文件的管理存储)

优采云 发布时间: 2022-02-07 22:18

  搜索引擎优化书籍(Elasticsearch的底层索引工具为Lucene进行索引文件的管理存储)

  Elasticsearch 是一个非常灵活且功能丰富的搜索引擎,它提供了许多不同的方式来查询数据。在实际业务场景中,经常会出现远低于预期查询速度的慢查询。如果业务对查询延迟比较敏感,那么 Elasticsearch 查询延迟的抖动就是一个比较麻烦的问题。

  Elasticsearch 作为一个分布式系统,可能有多种因素会影响查询性能。本文将分析导致查询慢的因素,并提供一些优化搜索速度的建议。

  Elasticsearch 调优搜索速度“向日葵合集-1”

  Elasticsearch 调优搜索速度“向日葵合集-2”

  Elasticsearch 调优搜索速度“向日葵合集-3”

  Elasticsearch 调优搜索速度“向日葵合集-4”

  Elasticsearch 调优搜索速度“Sunflower 采集-5”

  十二、使用索引排序来加速连接

  索引排序以降低索引性能为代价加快连接速度。

  Elasticsearch的底层索引工具是Lucene,Lucene通过Segment来管理和存储索引文件。默认情况下,segment中的文档是按照自增ID排序的(Lucene在写的时候会分配一个ID),按照文档ID顺序遍历查询,找到所有满足条件的文档。

  所以,假设我们的检索场景是按照某个字段排序的,如果底层文件也可以按照这个字段排序,会不会带来一些检索的优化?

  答案是肯定的,在检索阶段:在检索top k文档时,默认需要遍历所有文档才能找到所有相关文档,但是在配置了索引排序时,如果检索排序与索引排序一致,只需要检索前k个文档,这样就可以提前终止查询,减少计算和性能损失。

  Elasticsearch 6.x 版本增加了一项新特性,索引排序,它允许我们在创建索引时指定一个或多个字段进行排序。使用或配置方法如下:

  推特

  {

  “设置”:{

  “指数” : {

  "sort.field" : "日期",

  “排序顺序”:“降序”

  }

  },

  “映射”:{

  “特性”: {

  “日期”: {

  “类型”:“日期”

  }

  }

  }

  }

  上面的命令配置了twitter索引在写入的时候按照日期降序构建,即segment上的文档按照日期降序排列。检索时,请考虑以下搜索查询:

  获取 /twitter/_search

  {

  “大小”:10,

  “种类”: [

  {“日期”:“描述”}

  ],

  “track_total_hits”:假

  }

  因为底层segment是预先排序的,每个segment只需要取前10个文档进行比较,可以优化每个shard的查询时间。

  以上设置使用track_total_hits参数为false,无法获取匹配文档总数,加速检索。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线