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/lastName
是 searchable
,您应该可以使用这样的前缀查询:
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 firstName
和 lastName
。我假设这意味着您希望能够匹配任何文档,例如,至少有一篇文章名称 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 以帮助我们确定优先级。
我有一个名为“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/lastName
是 searchable
,您应该可以使用这样的前缀查询:
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 firstName
和 lastName
。我假设这意味着您希望能够匹配任何文档,例如,至少有一篇文章名称 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 以帮助我们确定优先级。