我想使用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$@\!
)时,会得到正确的结果。但是,当我删除最后一个!
并在查询中写入*
通配符时,却没有结果。没有任何迹象也没有结果。
有没有办法正确写特殊字符,因此搜索将在匹配时返回结果,例如。当我写$@\!*
时?
答案 0 :(得分:1)
目前,没有可用的内置方法来转义特殊字符。但是特殊字符必须转义才能用作搜索文本的一部分。您可以通过在它们前面加上反斜杠()来对其进行转义。需要转义的特殊字符包括:
+ - && || ! ( ) { } [ ] ^ " ~ * ? : \ /
例如,要转义通配符,请使用**\***
。
有关其他详细信息,请检查以下链接:
https://docs.microsoft.com/en-us/azure/search/query-lucene-syntax#escaping-special-characters
请在下面的链接中为实现此功能的用户语音请求投票,这将有助于我们确定请求的优先级。
希望有帮助。