【问题标题】:AzureSearchSDK returning diffrent results than portal testAzure 搜索 SDK 返回的结果与门户测试不同
【发布时间】:2019-02-09 00:26:02
【问题描述】:

使用 AzureSearch .NET SDK 中的 SearchAsync 函数输入包含 UTF8 符号的查询编码字符串时,我得到空响应,但没有找到任何记录。经过对Fiedler的调查,我知道POST请求是发送到Azure搜索服务的:

网址: /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 方法返回正确的结果。

【问题讨论】:

    标签: azure utf-8 azure-cognitive-search


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢你的回答,我终于明白这不是过滤的问题,在数据集中有记录匹配(过滤和搜索)标准。要从 POST 获得正确的结果,在使用波兰语 Microsoft Analyzer 时,您不应事先对查询进行编码。例如,它应该是 pierścionek 而不是 pier%C5%9Bcionek
    • 是的,很抱歉我错过了您原始示例中的内容,我会将其添加到答案中以使其完整。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多