Azure搜索按不完整的特殊字符进行搜索不起作用

时间:2019-10-18 12:34:07

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

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

我尝试转义每个特殊字符,尝试使用full query syntax并尝试使用通配符,但没有按预期工作。

这是方法:

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$@\!)时,会得到正确的结果。但是,当我删除最后一个!并在查询中写入*通配符时,却没有结果。没有任何迹象也没有结果。

有没有办法正确写特殊字符,因此搜索将在匹配时返回结果,例如。当我写$@\!*时?

1 个答案:

答案 0 :(得分:1)

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

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

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

有关其他详细信息,请检查以下链接:

https://docs.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

希望有帮助。