【问题标题】:Filter on Collection(Edm.String) type fields in Azure Search筛选 Azure 搜索中的 Collection(Edm.String) 类型字段
【发布时间】:2019-08-05 18:38:21
【问题描述】:

我有一个索引,该索引具有如下的 Collection(Edm.String) 类型字段,该字段是可分面且可过滤的。

Index definition

但是,当我使用以下有效负载进行查询以进行过滤时: {
“计数”:是的,
"search": "无法连接到 Azure SQL 数据库",
"searchFields": "内容、关键词",
“选择”:“关键词”, "facets": ["Source, sort:count", "SubSource, sort:count"], "filter": "keyphrases/any(t: search.in(t, 'sql server database'))", “顶部”:6 }

我看到这样的结果,其中关键短语甚至没有完整的值“'sql server database”。为什么会这样?筛选器如何对 Azure 搜索中的集合类型起作用?如何进行精确过滤?

"value": [
    {
        "@search.score": 0.9469998,
        "keyphrases": [
            "windows azure",
            "sql azure",
            "web application",
            "database",
            "desktop"
        ]
    },
    {
        "@search.score": 0.7976283,
        "keyphrases": [
            "Entity Framework Code",
            "modelBuilder",
            "base tables",
            "SQL Azure",
            "one-to-one mapping",
            "factory",
            "pre",
            "large numbers of tables",
            "partitioned view",
            "simple POCO",
            "typical partitioning",
            "horizontal partitioning strategy",
            "CHECK CONSTRAINTs",
            "gt",
            "EntityName",
            "lt",
            "ToTable",
            "DbContext class",
            "UNION",
            "project",
            "OnModelCreating event",
            "foo",
            "file groups",
            "bar",
            "instance",
            "peform",
            "runtime",
            "database",
            "Fluent API",
            "metadata"
        ]
    },

谢谢。

【问题讨论】:

    标签: azure-cognitive-search


    【解决方案1】:

    search.in 测试字段或集合值是否包含在分隔的值列表中(如here 所述)。所以这个表达式:

    keyphrases/any(t: search.in(t, 'sql server database'))
    

    相当于这个(因为空格是search.in的默认分隔符之一):

    keyphrases/any(t: t eq 'sql' or t eq 'server' or t eq 'database')
    

    如果您正在寻找短语“sql server database”(包括大小写和空格),那么过滤器应该是:

    keyphrases/any(t: t eq 'sql server database')
    

    【讨论】:

    • 我认为这个文档需要更正:docs.microsoft.com/en-us/azure/search/…
    • 感谢您指出这一点。它看起来像是我在答案中链接到的文档的缩写版本,并且缺少一些重要的细节(例如默认分隔符是空格或逗号的事实)。我会确保它得到修复。
    • 虽然这是设计使然,但 search.in 可以允许过滤值中的间距会很棒。
    • 可以的。您可以将所需的任何分隔符作为第三个参数传递。
    • 文档中的示例:$filter=search.in(name, 'Roach motel|Budget hotel', '|')
    猜你喜欢
    • 1970-01-01
    • 2021-05-11
    • 1970-01-01
    • 1970-01-01
    • 2022-07-05
    • 2016-11-14
    • 1970-01-01
    • 1970-01-01
    • 2021-11-02
    相关资源
    最近更新 更多