c# - Azure 搜索按非完整单词和特殊字符搜索不起作用

标签 c# azure-cognitive-search azure-search-.net-sdk

我想使用 Azure Search .NET SDK 搜索包含特殊字符的字符串。

我尝试转义每个特殊字符,尝试使用完整查询语法 并尝试使用通配符,但没有任何效果如预期。

方法如下:

public virtual async Task<SearchResultDto<T>> Search(string query, SearchOptionsInput searchOptionsInput)
{
   if (!_azureOptions.IsEnabled)
   {
      return null;
   }

   var searchIndexClient = GetSearchIndexClientForGivenType();
   var searchParameters = _objectMapper.Map<SearchParameters>(searchOptionsInput);

   searchParameters.QueryType = QueryType.Full;

   var searchResult = await searchIndexClient.Documents.SearchAsync<T>(query, searchParameters);

   return new SearchResultDto<T>
        {
                Count = searchResult.Count,
                Results = searchResult.Results.Select(r => r.Document).ToList(),
                FacetResults = searchResult.Facets,
        };
}

我的文档中 Name 字段设置为 $@!Q$@!。当我在查询中编写它并转义感叹号(如 $@\!Q$@\!)时,我得到了正确的结果。但是当我删除最后一个 ! 并在查询中写入 * 通配符时,我没有得到任何结果。没有任何迹象也没有结果。

有没有办法正确编写特殊字符,以便搜索返回匹配的结果,例如。当我写 $@\!*?

最佳答案

目前没有内置方法可以转义特殊字符。但是必须转义特殊字符才能用作搜索文本的一部分。您可以通过在它们前面加上反斜杠 \ 来转义它们。需要转义的特殊字符包括:

+ - && || ! ( ) { } [ ] ^ " ~ * ? : \ /

例如,要转义通配符,请使用 **\***

有关更多详细信息,请查看以下链接:

https://learn.microsoft.com/en-us/azure/search/query-lucene-syntax#escaping-special-characters

请在下面的链接中为实现此功能的用户语音请求投票,这将帮助我们确定请求的优先级。

https://feedback.azure.com/forums/263029-azure-search/suggestions/32114773-provide-method-for-escaping-characters-in-the-sear

希望对您有所帮助。

关于c# - Azure 搜索按非完整单词和特殊字符搜索不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58451056/

相关文章:

c# - 多个属性的 FluentValidation 规则

c# - 使用 finally 而不是 catch

c# - 无法在服务中注入(inject)依赖

Azure 搜索 : 16 MB limit not applicable on Edm. 字符串字段

azure - 如何在 azure 搜索中对复杂 json 对象(例如嵌套数组)进行字段映射

Azure 搜索 .net SDK-如何使用 "FindFailedActionsToRetry"?

azure - 管理 Azure 搜索 503

c# - 如何处理 C# 字符串插值中的空值?

azure - 如何在 Azure 认知搜索中检查同一文档中的字段之间是否不相等?

c# - 将 AzureSearch SDK 与 30-40 个 ISearchIndexClient 的静态字典结合使用的影响