## 排序
### 一、默认排序规则
默认情况下,是按照_score降序排序。
_score使用的算法,计算出一个索引中的文本,与搜索文本,他们之间的关联匹配程度
es使用的是,term frequency和inverse documnet frequency算法,简称为TF/IDF算法
term frequency:搜索文本中的各个词条在field文本中出现了多少次,出现次数越多,分数越高
inverse documnet frequency:搜索文本中的各个词条在整个索引的所有文档中出现了多少次,出现的次数越多,分数越低
从Elasticsearch 5之后, 缺省的打分机制改成了 __Okapi BM25__ 。
BM25 的 BM 是缩写自 Best Match, 25 貌似是经过 25 次迭代调整之后得出的算法,它也是基于 TF/IDF 进化来的。
Elasticsearch有三种控制相关度分数的方法:
- boost
- boosting
- function_score
评分公式
```
score(q,d) = queryNorm(q) //归一化因子
· coord(q,d) //协调因子
· ∑ (
tf(t in d) //词频
· idf(t)² //逆向文档频率
· t.getBoost() //权重
· norm(t,d) //字段长度归一值
) (t in q)