天天看点

es自定义排序

## 排序

### 一、默认排序规则

默认情况下,是按照_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)