# 定义

BM25是搜索引擎的经典排序函数，用于衡量一组关键词和某文档的相关程度。BM25的定义为

                    IDF * TF * (k1 + 1)
    BM25 = sum ----------------------------
               TF + k1 * (1 - b + b * D / L)

其中sum对所有关键词求和，TF（term frequency）为某关键词在该文档中出现的词频，D为该文档的词数，L为所有文档的平均词数，k1和b为常数，在悟空里默认值为2.0和0.75，不过可以在引擎初始化的时候在[EngineInitOptions.IndexerInitOptions.BM25Parameters](/types/indexer_init_options.go)中修改。IDF（inverse document frequency）衡量关键词是否常见，悟空引擎使用带平滑的IDF公式

                       总文档数目
    IDF = log2( ------------------------  + 1 )
                 出现该关键词的文档数目
# 使用

索引器负责计算BM25，为了能计算文档的BM25值，必须保存文档中所有关键词的词频，这需要在引擎初始化时将[EngineInitOptions.IndexerInitOptions.IndexType](/types/indexer_init_options.go)至少设置为FrequenciesIndex（LocationsIndex也可计算BM25，但这种索引也保存词出现的位置，消耗更多内存）。

然后你可以在你[自定义的评分规则](/docs/custom_scoring_criteria.md)中调用IndexedDocument.BM25得到此值作为评分数据。如果你想完全依赖BM25评分，可以使用默认的评分规则，既RankByBM25。
