将静态相关性信号纳入评分
Elastic Stack Serverless
许多领域都有已知与相关性相关的静态信号。例如,PageRank 和 URL 长度是网页搜索中常用的两个特征,可以独立于查询来调整网页的评分。
有两种主要的查询允许将静态评分贡献与文本相关性结合起来,例如使用 BM25 计算的。
例如,假设您有一个 pagerank 字段,您希望将其与 BM25 分数结合起来,以便最终分数等于 score = bm25_score + pagerank / (10 + pagerank)。
使用 script_score 查询,查询将如下所示:
GET index/_search {
"query": {
"script_score": {
"query": {
"match": { "body": "elasticsearch" }
},
"script": {
"source": "_score * saturation(doc['pagerank'].value, 10)"
}
}
}
}
pagerank必须映射为 数字类型
而使用 rank_feature 查询,它将如下所示:
GET _search {
"query": {
"bool": {
"must": {
"match": { "body": "elasticsearch" }
},
"should": {
"rank_feature": {
"field": "pagerank",
"saturation": {
"pivot": 10
}
}
}
}
}
}
pagerank必须映射为rank_feature字段
虽然这两个选项都会返回相似的分数,但存在权衡:script_score 提供了极大的灵活性,使您能够按照自己的意愿将文本相关性分数与静态信号结合起来。另一方面,rank_feature 查询只暴露了几种将静态信号纳入评分的方法。但是,它依赖于 rank_feature 和 rank_features 字段,这些字段以特殊方式索引值,使 rank_feature 查询能够跳过非竞争性文档,从而更快地获得查询的顶级匹配项。