Azure 搜索中名为 Term Boosting 的功能支持您的要求。在您的示例中,您有一些必须存在的搜索词。但是,您实际上并不知道这些术语是否存在于您心目中的类别中。如果他们这样做,您希望将这些提升到顶部。
- 您的搜索词是一个过滤器,用于确定是否应包含某篇文章。
- 您请求的类别是一个偏好。
用例
假设您有一个音乐索引。您使用以下索引规范(例如简化)。
{
"fields": [
{"name": "Id", "type": "Edm.String", "searchable": false, "filterable": true, "retrievable": true, "sortable": true, "facetable": false, "key": true, "indexAnalyzer": null, "searchAnalyzer": null, "analyzer": null, "synonymMaps": [] },
{"name": "Title", "type": "Edm.String", "searchable": true, "filterable": true},
{"name": "Genre", "type": "Edm.String", "searchable": true, "filterable": true},
{"name": "Artist", "type": "Edm.String", "searchable": true, "filterable": true}
],
}
索引包含以下项目。
{
"value": [
{
"@search.action": "mergeOrUpload",
"Id": "1",
"Title": "We will rock you",
"Genre": "Classical",
"Artist": "London Symphony"
},
{
"@search.action": "mergeOrUpload",
"Id": "2",
"Title": "We will rock you",
"Genre": "Rock",
"Artist": "Queen"
},
{
"@search.action": "mergeOrUpload",
"Id": "3",
"Title": "Bohemian Rhapsody",
"Genre": "Rock",
"Artist": "Queen"
}
]
}
现在,假设您正在寻找歌曲我们会摇滚你。如果您只是搜索这些术语,您将获得两次点击。请注意,类型为 Rock 的项目得分较高。这是因为您的搜索词 rock 的词频。摇滚出现在类型和标题中。
{
"@odata.count": 2,
"value": [
{
"@search.score": 1.4384104,
"Id": "2",
"Title": "We will rock you",
"Genre": "Rock",
"Artist": "Queen"
},
{
"@search.score": 1.1507283,
"Id": "1",
"Title": "We will rock you",
"Genre": "Classical",
"Artist": "London Symphony"
}
]
}
在您的情况下,您更喜欢特定类别的内容。翻译成这个例子,假设你真的更喜欢古典流派的热门歌曲。您可以使用过滤器构建查询,如下所示。
我们会震撼你 类型:“古典”
由于您正在过滤,因此您只会获得 1 次命中。请注意,现在分数也更高了。
{
"@odata.count": 1,
"value": [
{
"@search.score": 1.4384104,
"Id": "1",
"Title": "We will rock you",
"Genre": "Classical",
"Artist": "London Symphony"
}
]}
如果您应用提升,例如 10 倍,您会看到分数增加。例如
我们会震撼你 类型:“古典”^10
{
"@odata.count": 1,
"value": [
{
"@search.score": 4.0275493,
"Id": "1",
"Title": "We will rock you",
"Genre": "Classical",
"Artist": "London Symphony"
}
]}
但是,假设您不知道是否有不同类型的多个版本。你想要的是所有版本的“we will rock you”,但如果有古典流派的热门歌曲,那就是你喜欢的。这是一个不同的问题(如果我的解释正确,您要问什么)。
(we will rock you) OR (we will rock you Genre:"Classical"^10)
这会产生 2 个结果,经典版本位于顶部。
"@odata.count": 2,
"value": [
{
"@search.score": 5.1782775,
"Id": "1",
"Title": "We will rock you",
"Genre": "Classical",
"Artist": "London Symphony"
},
{
"@search.score": 1.4384104,
"Id": "2",
"Title": "We will rock you",
"Genre": "Rock",
"Artist": "Queen"
}
]