提供的Nate的答案难以理解,并且缺失一些组件。我概述了整个评分过程,它非常复杂。
当用户执行搜索时,将向Azure Search提供一个“查询”。 Azure搜索使用TF-IDF
算法根据形成的“标记”通过分析器确定0-1分数。请记住,语言特定的分析器可能会为一个单词生成多个标记。对于每个可搜索字段,都将生成分数,然后将其乘以评分文件中的权重。最后,所有加权分数将被总结,并得出初始加权分数。
评分文件还可能包含评分函数。评分函数可以是基于数量、新鲜度、地理位置或标签的函数。一个评分文件中可以制作多个函数。
函数将进行评估,函数的分数可以被累加,或者取平均值、最小值、最大值或第一次匹配。所有函数的总和然后乘以总加权分数,这就是最终得分。
以下是一个示例,这是一个带有评分文件的示例索引。
{
"name": "musicstoreindex",
"fields": [
{ "name": "key", "type": "Edm.String", "key": true },
{ "name": "albumTitle", "type": "Edm.String" },
{ "name": "genre", "type": "Edm.String" },
{ "name": "genreDescription", "type": "Edm.String", "filterable": false },
{ "name": "artistName", "type": "Edm.String" },
{ "name": "rating", "type": "Edm.Int32" },
{ "name": "price", "type": "Edm.Double", "filterable": false },
{ "name": "lastUpdated", "type": "Edm.DateTimeOffset" }
],
"scoringProfiles": [
{
"name": "boostGenre",
"text": {
"weights": {
"albumTitle": 1.5,
"genre": 5,
"artistName": 2
}
}
},
{
"name": "newAndHighlyRated",
"functions": [
{
"type": "freshness",
"fieldName": "lastUpdated",
"boost": 10,
"interpolation": "linear",
"freshness": {
"boostingDuration": "P365D"
}
},
{
"type": "magnitude",
"fieldName": "rating",
"boost": 8,
"interpolation": "linear",
"magnitude": {
"boostingRangeStart": 1,
"boostingRangeEnd": 5,
"constantBoostBeyondRange": false
}
}
],
"functionAggregation": 0
}
]
}
假设输入的查询是Linkin Park著名专辑"Meteora",我们假设在索引中有以下文档。
{
"key": 123,
"albumTitle": "Meteora",
"genre": "Rock",
"genreDescription": "Rock with a flick of hiphop",
"artistName": "Linkin Park",
"rating": 4,
"price": 30,
"lastUpdated": "2020-01-01"
}
我不是TF-IDF方面的专家,但我可以想象会产生以下未加权分数:
{
"albumTitle": 1,
"genre": 0,
"genreDescription": 0,
"artistName": 0
}
评分配置文件对于albumTitle字段的权重为1.5,因此总加权分数将为:1 * 1.5 + 0 + 0 + 0 = 1.5
然后将评分配置文件功能进行评估。在本例中有两个函数。第一个函数使用365天的范围来评估新鲜程度。最近更新的字段具有今年4月1日的值,假设距今还有50天,则总范围为365,因此如果上次更新日期是今天,则得到1分,如果过去365天或更久,则得到0分,在我们的案例中是1 - 50/365 = 0.8630..
。该函数的提升为10
,因此第一个函数的分数为8.630
。
第二个函数是幅度函数,范围为1到5。文档获得了4颗星的评分,因此其价值为0.8,因为1颗星是0,5颗星是1。所以4颗星显然是4 / 5 = 0.8
。幅度函数的提升为8,因此我们需要用8乘以该值。0.8 * 8 = 6.4
。
functionAggregation
为0,这意味着我们必须对所有函数的结果进行求和。这样得到的评分配置文件函数总分为:6.4 + 8.630 = 15.03
。规则是将字段的总加权分数与评分配置文件函数的总分相乘,从而得到总分:15.03 * 1.5 = 22.545
。
希望您喜欢这个例子。
15.03 + 1.5 = 16.53
”。这里是乘以还是加上加权基础分? - Pankaj Yadav15.03*1.5=22.545
吗?即将总评分配置函数得分(15.03)乘以字段的加权分数(1.5)。你在这里做加法15.03+1.5=16.53
,我有什么遗漏吗? - Pankaj Yadav