【发布时间】: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属性而不是使用:语法?