搜索引擎优化书籍(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,无法获取匹配文档总数,加速检索。