- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在 Azure 搜索上的索引中添加评分配置文件。更具体地说,我索引中的每个文档都有一个 Edm.Double
类型的 weight
字段,我想根据这个值来提升它们。我不想直接根据权重
对它们进行排序,因为搜索词的相关性也很重要。
所以为了测试它,我创建了一个评分配置文件,其幅度函数的提升值为 1000(只是为了看看我是否了解这个东西是如何工作的)、线性插值、起始值 0 和结束值 1。我是什么期望将提升值添加到整体搜索分数中。因此,权重为 0.5 的文档将获得 500 的提升,而权重为 0.125 的文档将获得 125 的提升。然而,所得分数远没有这么直观。
对于这种情况,我有几个问题:
1) 本例中的函数分数是如何生成的?我的文档权重彼此接近(假设为 0.5465 和 0.5419),但它们的最终分数之间的差异约为 100-150,而我预计其约为 4-5。
2) 函数得分和权重如何汇总为每个搜索结果的最终得分?
最佳答案
因此,Nate 提供的答案很难理解,并且遗漏了一些组件。我概括了整个评分过程,相当复杂。
因此,当用户执行搜索时,将向 Azure 搜索提供查询
。 Azure 搜索使用 TF-IDF
算法根据分析器形成的 Token
确定 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
之后,将评估评分配置文件函数。在本例中,有 2 个。第一个评估新鲜度,范围为 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。所以 a 代表 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
。
希望您能喜欢这个例子。
关于ranking - 评分配置文件如何在 Azure 搜索中生成分数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41427940/
当我搜索“iphone”时,我有以下记录和分数 - 记录1: 字段名称 - 显示名称:“iPhone” 字段名称 - 名称:“iPhone” 11.654595 = (MATCH) sum of:
Types Description: parent type 1)Parent Type: "product" 2)childType : "ratings" 问题描述:我有一个es查询(q
如果您使用 Freebase 搜索按名称获取任何实体的匹配项,您将获得按 relevance score 排序的结果.例如尝试 Taj Mahal . 我正在尝试使用 Freebase 数据转储获得类
我试图根据多个不同的标准给不同的城市打从 1 到 5 的“分数”,最终将分数相加并决定哪个城市最好。 表“international_tobacco_alcohol”包含居民用于酒精和烟草的收入百分比
我有一年中任何一个季度的索引(“index-2015.1”,“index-2015.2”...) 我在每个索引上有大约 3000 万个文档。 文档有一个文本字段('title') 我的文档排序方式是(
我有一个数组,我想根据为数组中的每个元素分配一个分数来排序。 假设可能的分数范围是 0-100。为了获得该分数,我们将使用 2 个比较数据点,一个权重为 75,一个权重为 25。我们称它们为 valu
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 4 年前。 Improve this qu
做一排星星作为评级是微不足道的,但我不确定做随机数的正确 flutter 方法是什么? 换句话说,假设我的评分最多为 5 颗星,我该怎么做,只有一颗或两颗星?我可以有一个 switch 语句,并返回带
我需要创建一个灵活的(最好是动态的)评分引擎,就像信用评分或保费计算系统一样。有创建评分引擎实践经验的人有任何建议、示例或建议模式吗? 我已经知道: Rete Algorithm FICO The o
我的索引中有以下类型的文档,但由于深度嵌套方面,找不到正确排序的方法。 文档示例: { "metadatas": [{ "name": "name", "timeValidity"
我正在寻找 Lucene (Java) 中的相似性模块,它给出基于权重的分数。我知道这很模糊,最好用一个例子来解释。 Document 1 ----------- Firstname: Frances
我对 Lucene 8 比较陌生,想了解如何将旧版 Solr 4 评分迁移到 Lucene。这就是 Solr 4 目前的做法。 /* * From the SolrRelevan
我正在使用 Lucene 来构建标记共现的大型索引(例如 [elephant,animal]、[melon,fruit]、[宝马,汽车],...)。我使用 BooleanQuery 查询索引以获取绝对
Ratingbar 星未正确显示。我不知道我做错了什么。当我使用自定义样式时,只显示一颗星,它的长度等于 5 星。 风格是: @drawable/manual_ratingbar
我编写了一个程序,它读取 imdb 上排名前 250 的电影的名称和评分,并返回评分的平均值。我有以下程序 import java.io.IOException; import org.jsoup.*
我有一个直截了当的问题,我将 ngram 用于部分匹配。实现效果很好,但得分结果并不像我希望的那样有效。我希望我的分数结果看起来像这样: 柯:.1 Kev:.2 凯维:.3 凯文:.4 相反,我得到以
假设我有一个像这样的 MySQL 表: 软件表: id int name text votes int rating int 其中投票是某人为该项目投票的次数,评分是这些投票的平均值。 示例数据: i
我在索引期间使用过滤器 EdgeNGramTokenFilter。 当我寻找一个词时。当 Lucene 找到完整单词或另一个单词的一部分时,它的评分不会产生差异。 例如,如果我正在查找单词 PUB。我
我们正在使用 java 并使用 elasticsearch java api 开发一个应用程序。我们对元数据建立了索引,并希望在索引时或搜索时使用排名/评分。 而且,我不知道是否可以对用户单击结果时选
有人可以解释(或引用引用资料)用更简单的词来比较 SOLR 和 LUCENE 使用的评分机制。 它们有什么区别吗? 我不太擅长 solr/lucene,但我的发现表明它们似乎不同。 P.S:我只是尝试
我是一名优秀的程序员,十分优秀!