ElasticSearch学习总结(三):查询总结

本文深入探讨Elasticsearch的查询机制,涵盖评分算法(如TF/IDF、BM25),查询改写策略(如前缀查询、通配符查询的优化)以及过滤器原理,旨在理解查询分类,如基本查询、组合查询、无分析查询等,并掌握如何优化查询性能。
摘要由CSDN通过智能技术生成

本文主要对Elasticsearch中查询相关的知识做一个简单的总结,内容主要包括查询的评分机制,查询改写,过滤器,以及对常见的查询做一个简单的分类

1. 评分机制

在Lucense中默认使用TF/IDF算法对文档进行评分,该算法已经在前文做了简单的介绍,这里主要总结下什么样的因素可能得到高分
1. 越罕见的词被匹配上,得分越高。
2. 文档字段越短(包含更少的词项),文档的得分越高
3. 权重越高(可以是索引期或是查询期赋予的权重),得分越高

Elasticsearch 提供的评分算法比较丰富(默认为BM25),可以通过similarity进行配置,可配置的项目包括:
1. BM25
2. Classic(基于TF/IDF)
3. DFR/DFI
4. IB
5. ….
关于每个算法的介绍以及可配置参数可以参见:https://www.elastic.co/guide/en/elasticsearch/reference/5.2/index-modules-similarity.html

另外需要注意的是除了使用similarity进行评分的控制之外,还可以通过function_score,constant_score,rescore 等多种机制对评分进行更加精确的控制。

2. 查询改写

在进行==前缀查询==或是==通配符查询==时,实际上会转化为对多个关键词的查询,处于性能优化的考虑,Lucene会把这种查询转化为一组开销较小的查询方式,采取的主要手段便是“查询改写(rewrite)”

查询改写使用的主要策略为通过使用常量得分查询(constant score query)来代替常规查询来减少查询时性能的开销,对于可能匹配term较多的查询时,性能提升尤为明显。

在查询改写的过程中可以根据需要自定义改写的方式,可支持的配置如下

  • scoring_boolean:该选项将每个生成的词项转化为布尔查询中的一个或从句(Boolean should clause)。这种改写方法需要针对每个文档都计算得分。因此,这种方法比较耗费CPU,而且有些查询生成了太多的词项,以至于超出了布尔查询默认的1024个从句的限制。默认的布尔查询限制可以通过设置Elasticsearch.yml文件的index.query.bool.max_clause_count属性来修改。改写后的布尔查询的从句数越多,查询性能越低
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值