使用特殊字符时,Azure 搜索 SDK 部分搜索失败
Azure Search SDK fails partial search when using special characters
我有下面的代码,它应该 return Azure 索引中所有以 T&S 开头的名称
例如,结果应该如下所示
- T&S
- 大同有限公司
- T&S 公司
我们在代码中看到的搜索文本是 "T&S*"
的 UrlEncoded 版本
搜索代码块
var response = await _searchClient.Documents.SearchAsync<customDto>("%22T%26S%22*",
new SearchParameters
{
SearchFields = new List<string> { "Name" },
SearchMode = SearchMode.All
});
自定义 DTO
public class CustomDto{
public CustomDto(int id,string name)
{
Id=Convert.ToString(id),
Name=name
}
[IsSearchable, IsFilterable]
[System.ComponentModel.DataAnnotations.Key]
public string Id { get; }
[IsSearchable, IsFilterable, IsSortable]
public string Name {get;}
}
现在,
如果我将类似的搜索文本放在 azure 搜索查询中 window
我得到了预期的结果 %22T%26S%22*&searchMode=all&searchFields=Name
但由于某种原因,代码 return 的结果为空。我不明白我在这里做错了什么。
请协助。
谢谢
你可以试试下面的代码。这使用 Microsoft.Azure.Search
SDK(版本 10.1.0)。
var searchCredentials = new SearchCredentials("<api-key (admin or query>");
var indexClient = new SearchIndexClient("<search-service-name>", "<index-name>", searchCredentials);
var results = indexClient.Documents.Search("\"T\&S\"*",
new SearchParameters
{
SearchFields = new List<string> { "Name" },
SearchMode = SearchMode.All
});
SDK 实际上会发出 POST
请求,因此您实际上不必 URL 对搜索字符串进行编码(发出 GET
请求时需要这样做) .您需要做的是转义 &
字符,方法是在字符前加上 \
前缀,这就是我所做的。请在此处查看 Escaping Special Characters
:https://docs.microsoft.com/en-us/azure/search/query-lucene-syntax#bkmk_syntax 了解更多信息。
我有下面的代码,它应该 return Azure 索引中所有以 T&S 开头的名称 例如,结果应该如下所示
- T&S
- 大同有限公司
- T&S 公司
我们在代码中看到的搜索文本是 "T&S*"
的 UrlEncoded 版本搜索代码块
var response = await _searchClient.Documents.SearchAsync<customDto>("%22T%26S%22*",
new SearchParameters
{
SearchFields = new List<string> { "Name" },
SearchMode = SearchMode.All
});
自定义 DTO
public class CustomDto{
public CustomDto(int id,string name)
{
Id=Convert.ToString(id),
Name=name
}
[IsSearchable, IsFilterable]
[System.ComponentModel.DataAnnotations.Key]
public string Id { get; }
[IsSearchable, IsFilterable, IsSortable]
public string Name {get;}
}
现在, 如果我将类似的搜索文本放在 azure 搜索查询中 window 我得到了预期的结果 %22T%26S%22*&searchMode=all&searchFields=Name
但由于某种原因,代码 return 的结果为空。我不明白我在这里做错了什么。
请协助。
谢谢
你可以试试下面的代码。这使用 Microsoft.Azure.Search
SDK(版本 10.1.0)。
var searchCredentials = new SearchCredentials("<api-key (admin or query>");
var indexClient = new SearchIndexClient("<search-service-name>", "<index-name>", searchCredentials);
var results = indexClient.Documents.Search("\"T\&S\"*",
new SearchParameters
{
SearchFields = new List<string> { "Name" },
SearchMode = SearchMode.All
});
SDK 实际上会发出 POST
请求,因此您实际上不必 URL 对搜索字符串进行编码(发出 GET
请求时需要这样做) .您需要做的是转义 &
字符,方法是在字符前加上 \
前缀,这就是我所做的。请在此处查看 Escaping Special Characters
:https://docs.microsoft.com/en-us/azure/search/query-lucene-syntax#bkmk_syntax 了解更多信息。