Azure 认知搜索通配符筛选器

Azure cognitive search wildcard filter

我有一个名为“ArticleNames”的复杂类型的 Azure 搜索索引。这有两个子字段:名字和姓氏。我正在尝试跨这些字段创建通配符查询,但在获取语法正确时遇到问题。如果我寻找完全匹配,则一切正常,如下所示:

        string facetFilter = " ArticleNames/any(person: person/lastName eq 'Trudeau')";
        var options = new SearchOptions()
        {
            Filter = facetFilter,
            Size = 10,
            IncludeTotalCount = true,
            SearchMode = SearchMode.All,
            Skip = start,
            QueryType = SearchQueryType.Full
        };
        SearchResults<SearchDocument> response = searchClient.Search<SearchDocument>("*", options)

如果我只通过 'Tru',我该如何修改它,以便我能够获得 Trudea 和 Truman 的结果?

感谢

对于部分匹配,您需要使用全文搜索,而不是过滤器。假设 ArticleNames/lastNamesearchable,您应该可以使用这样的前缀查询:

var options = new SearchOptions()
{
    Size = 10,
    IncludeTotalCount = true,
    SearchMode = SearchMode.All,
    Skip = start,
    QueryType = SearchQueryType.Full
};
SearchResults<SearchDocument> response = searchClient.Search<SearchDocument>("ArticleNames/lastName:Tru*", options);

虽然它不在您的示例中,但您在问题中提到您希望能够查询 across firstNamelastName。我假设这意味着您希望能够匹配任何文档,例如,至少有一篇文章名称 firstName 以“Jo”开头并且 lastName 以“Sm”开头给定的文章。您应该知道,除非您使用严格的过滤(例如 firstName 正好等于“John”,lastName 等于“Smith”),否则今天这是不可能的。如 this article.

中所述,跨复杂集合的全文搜索查询仅支持“不相关”语义

例如,如果您执行了以下搜索查询:

search=ArticleNames/firstName:Jo* AND ArticleNames/lastName:Sm*

AND 指的是整个文档,而不是 ArticleNames 字段的给定元素,因此它会匹配名称为“Jonathan Brown”和“Alice Smart”的文档,即使您的意图是只匹配像“Jonathan Smart”这样的东西。

如果此方案对您很重要,请投票 this User Voice item 以帮助我们确定优先级。