文档打分
确定文档和查询相关程度的过程称为打分,ES使用了TF-IDF(词频——逆文档频率)和向量空间模型结合的算法进行打分
- 词频(TF) : 分词出现在当前文档中的次数,次数越多得分越高
- 逆文档频率(IDF) : 分词出现在不同文档的文档数量,文档数量越少得分越高
boosting
- 概述
-
用来修改文档相关性,包含两种方式,可以在索引或查询时提升文档得分
-
boots参数值不是精确的乘数,计算得分时boots值是被标准化的,更多的应该考虑和其他字段的相对值
-
- 索引期间bootsing的缺点
- 在mpping中使用boots参数设置字段进行boots,boots值是固定的,如果修改则需要重新索引
- boots值是以低精度存储在Lucene的内部索引结构中,计算文档得分肯能丢失精度
- boots是作用于词条的,如果被boots字段匹配多个词条,意味着多次boots会增加字段的权重
再打分机制(rescore)
- 概述
- 在初始查询运行后对返回的结果集再进行打分,即先通过查询减少打分需要操作的文档数量,可以提升面对大量文档同时打分的性能
- function_score定制得分
- funcation_score使用再打分机制,funcations数组中的计算打分函数作用于查询出来的结果集
- weight函数
- 是最简单的打分函数,直接将得分乘以weight函数值,对字段整体提升得分,也可以配合过滤器使用
- field_value_factor函数
- 本质为根据字段数值大小来提升得分,即字段值越大得分越高,打分规则为数值字段的值乘以因子数后的结果上使用数学函数,例如log,ln,sqrt等函数
- random_score随机函数
- 随机打分,也可以指定随机种子
- 衰减函数
允许根据某个字段应用一个逐步衰减的文档得分,例如某些场景地理位置越远的得分越低,时间越久的得分越低- linear: 一次函数式的递减
- gauss: 高斯曲线式的递减
- exp: 指数曲线式的递减
- 合并得分的规则
- 原始查询的得分和函数打分的合并称为boots_mode
- 合并每个函数的得分称为score_mode
- 以上两种合并模式可指定规则有乘,加,平均,取第一个得分,取最大得分,取最小得分选项,默认合并是规则乘
字段数据
- 字段数据即某个字段的值的集合(值去重唯一),排序或聚集操作时需要字段数据
- 字段数据缓存方式
- 预热器(varmer)缓存,预热器时ElasticSearch自动运行的查询,以确保缓存的填充,即预加载
- ElasticSearch创建搜索片段时自动加载字段数据,需要开启fielddata.loading为eager
- 管理字段数据
- 限制字段数据使用的内存: 在ElasticSearch的配置文件中限制cache的大小和缓存失效时间
- 使用字段数据的断路器: 加载字段数据时断路器评估加载数据使用的内存量,检查加载是否会导致超出阈值,如果超出抛出异常阻止,设置使用indices.breaker.fielddata.limit参数设置阈值
- 文档值(doc_values): 在文件索引时将要加载到内存中的字段数据和普通索引数据一起存储到磁盘上