首页 > 解决方案 > AzureSearchSDK 返回的结果与门户测试不同

问题描述

在使用 AzureSearch .NET SDK 中的 SearchAsync 函数输入包含 UTF8 符号的查询编码字符串时,我得到了空响应,但没有找到任何记录。在对 Fiedler 进行调查后,我知道 POST 请求被发送到 azure search 服务:

url: /indexes('[INDEX_NAME]'/docs/search.post.search?api-version=2017-11-11 HTTP/1.1

身体:

{
"count": false,
 "facets": [],
 "filter": "search.ismatch('6','CataloguesIds')",
 "queryType": "full",
 "scoringParameters": [],
 "search": "pier%C5%9Bcionek*",
 "searchMode": "any",
 "select": "Id,Name"
 }

Azure 门户发送的相同请求会返回正确的结果。虽然 Fiedler 表明在门户中使用的方法是 GET

网址:/indexes/products-index/docs?api-version=2017-11-11&search=pier%C5%9Bcionek*。

对于包含 UTF8 符号的查询,我应该怎么做才能从 AzureSearch SDK 获得与门户中相同的响应?对于没有 UTF8 符号的请求,SearchAsync 方法返回正确的结果。

标签: azureutf-8azure-cognitive-search

解决方案


您应该期望 Azure 门户中的查询资源管理器和直接使用 API 的结果相同。

在这种情况下,您上面包含的两个查询是不同的。POST 查询包括搜索子句和过滤子句,而 GET 请求只有搜索子句。也许索引中没有满足 POST 查询中制定的两个条件的文档,导致结果为空?

此外,对于 POST 请求的正文,您不应对值进行 URL 编码。正文需要是正确的 JSON 文档(包括考虑正确的字符编码),无需额外编码。


推荐阅读