# 定义 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。