首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我可以在Azure认知搜索中使用可选筛选器吗?

我可以在Azure认知搜索中使用可选筛选器吗?
EN

Stack Overflow用户
提问于 2021-11-04 18:16:45
回答 2查看 81关注 0票数 0

我想实现这样的搜索逻辑:“给我索引中的所有与我的术语相匹配的文章,并且更喜欢某个类别的文章”。

在弹性搜索中,可以使用“应该”布尔查询:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html来实现这一点。

子句(查询)是否应该出现在匹配的文档中。

但我不知道如何在Azure认知搜索中实现这一点。一种选择是搜索不属于类别的所有文章,然后搜索所有不在类别中的文章,并在评分的基础上建立某种全球秩序。

有内置功能吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-11-04 19:55:33

您应该能够通过使用允许在过滤器表达式中编写全文搜索的search.ismatchscoring来实现所需的行为。

此筛选器表达式将确保skateboards位于Title中,并在Category中搜索sports以帮助评分,但由于or语句,它仍将返回其他类别的文档:

search.ismatchscoring('skateboards', 'Title') and (search.ismatchscoring('sports', 'Category') or search.ismatchscoring('*'))

票数 1
EN

Stack Overflow用户

发布于 2021-11-05 13:50:30

您所要求的是通过名为术语助推在Azure搜索的功能来支持的。在您的示例中,您有一些必须存在的搜索词。但是,你实际上不知道这些术语是否在你心目中的某个类别中找到。如果他们这样做了,你会想把这些提升到顶端。

  • 您的搜索项是一个筛选器,用于确定是否应该包含项目。
  • 您所要求的类别是首选项。

用例

假设你有一个包含音乐的索引。使用以下索引规范(例如,简化)。

代码语言:javascript
运行
复制
{
"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}
], 

}

索引包含以下项。

代码语言:javascript
运行
复制
{
    "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的项目得分较高。这是因为你的搜索词岩石的词频。摇滚既发生在体裁中,也出现在标题中。

代码语言:javascript
运行
复制
{
        "@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"
        }
    ]
}

在您的例子中,您更喜欢特定类别的内容。翻译成这个例子,假设你真的更喜欢古典风格的热门歌曲。您可以使用过滤器来构造查询,如下所示。

我们将震撼你的流派:“古典”

因为你是过滤,你只会得到一个命中。注意,分数现在也更高了。

代码语言:javascript
运行
复制
{
"@odata.count": 1,
"value": [
    {
        "@search.score": 1.4384104,
        "Id": "1",
        "Title": "We will rock you",
        "Genre": "Classical",
        "Artist": "London Symphony"
    }
]}

如果你申请提升,比如说10倍,你就会看到分数增加了。例如。

我们将震撼你的流派:“古典”^10

代码语言:javascript
运行
复制
{
"@odata.count": 1,
"value": [
    {
        "@search.score": 4.0275493,
        "Id": "1",
        "Title": "We will rock you",
        "Genre": "Classical",
        "Artist": "London Symphony"
    }
]}

但是,假设您不知道在不同的类型中是否有多个版本。你想要的是所有版本的‘我们将摇滚你’,但如果有一个流行的古典体裁,这是你喜欢的。这是一个不同的问题(如果我的解释是正确的,你会问什么)。

代码语言:javascript
运行
复制
(we will rock you) OR (we will rock you Genre:"Classical"^10)

这会产生两个结果,上面是经典版本。

代码语言:javascript
运行
复制
    "@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"
    }
]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69843991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档