【问题标题】:Azure Search SDK 11 WildcardsAzure 搜索 SDK 11 通配符
【发布时间】:2021-08-01 06:19:46
【问题描述】:

我正在尝试使用 .NET SDK V11 搜索以查找所有以 JOHN 开头的名称。模糊搜索的作品 find, John~, 以及 Contains, John。但如果我通过约翰*。什么都没有回来。我试过了 '?'反而。结果一样。

var options = new SearchOptions
{
 QueryType = SearchQueryType.Full,
 IncludeTotalCount = true,
 Skip = criteria.Page * criteria.PageSize,
 Size = criteria.PageSize,
};


var searchResults = await client.SearchAsync<Result>("FirstName:JOHN*", options);

在查看了 MS 网站上的大量文档后,我不确定还有什么可以尝试的。它说它应该可以工作,'Jo*n' 似乎也不起作用。

【问题讨论】:

  • 我很确定使用 SearchQueryType.Full 您正在使用 lucene 语法,其中波浪号 ~ 用于模糊搜索,而不是星号 *。在简单模式下,星号用于开头/结尾(不确定中间通配符)。如果您使用正则表达式样式,则可以使用星号,即John.*。我可能在这一切上都错了,但值得一试
  • 嗯,这是来自 MS 站点的引述:“完整的 Lucene 语法支持前缀、中缀和后缀匹配。但是,如果您只需要前缀匹配,则可以使用简单语法(前缀两者都支持匹配)。” (docs.microsoft.com/en-us/azure/search/query-lucene-syntax)
  • 哇,你的权利...这很臭,因为我无法将 Fuzzy 与不同领域的开头混合和匹配...
  • 你能混入正则表达式吗? Starts-with in regex 类似于^ABC.*,这意味着以“ABC”开头(您甚至可能不需要^ 锚点)
  • 1. FirstName 字段是否在您的索引中定义为可搜索? 2. 你用的是什么分析仪? 3. 是否尝试过指定SearchFields 属性而不是使用: 语法?

标签: c# azure-cognitive-search


【解决方案1】:

所以我不得不在下面使用这个解决方案。不知道为什么,它似乎与 MS 文档相矛盾。

Filter = "search.ismatch('/John.*/,','FirstName','full','all')"

虽然效果很好......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-05
    • 2020-04-26
    • 2021-03-06
    • 1970-01-01
    • 2020-05-08
    • 2019-09-25
    • 2016-03-16
    • 2012-08-29
    相关资源
    最近更新 更多