Azure 搜索索引的 OData API 不返回元数据

Posted

技术标签:

【中文标题】Azure 搜索索引的 OData API 不返回元数据【英文标题】:OData API for a Azure search index not returning metadata 【发布时间】:2020-01-09 15:41:24 【问题描述】:

我们遇到了 Azure 搜索索引的 OData API 问题,它没有返回元数据。我们能够执行基于 OData 的查询,但无法访问元数据

我们的期望是 Odata 端点

https://search-service-name.search.windows.net/indexes/index-name?api-version=2019-05-06&api-key =XXXXXXXXXXXX&odata.metadata=full

应该返回元数据。 我们尝试过的其他端点

https://search-service-name.search.windows.net/indexes('index-name')/$metadata?api-version=2019 -05-06&api-key=XXXXXXXX&odata.metadata=full

如果我们使用设置的 api-key 进行查询,我们会得到错误 “错误”: “代码”: ””, "message": "授权失败。"

使用 Admin key 作为 api-key,返回的错误是 "Message": "URI 查询字符串中不允许使用给定的 API 密钥。"

还有其他人能够获得与 Azure 搜索索引一起使用的完整 OData API 吗?

谢谢

【问题讨论】:

我很好奇 -- 为什么需要完整的 OData 元数据? 我们目前正在研究 odata.metadata=minimal 是否足以将搜索索引文档配置为 SF 中的外部对象。 感谢您的信息。我很想了解更多关于这种情况的信息。根据您的使用模式,直接通过 OData 从 Azure 搜索中提取数据可能不是一个好主意。如果您有兴趣继续此对话,请随时通过 microsoft 的 bruce dot johnston 给我发送电子邮件。 【参考方案1】:

odata.metadata=fullapi-key 都需要作为 HTTP 标头而不是查询字符串参数传递。 api-key 是它自己的标头,而 odata.metadata=full 是一个参数,应该是 Accept 标头的一部分,如下所示:application/json;odata.metadata=full

也就是说,除非您尝试将 Azure 搜索与启用了 OData 的客户端一起使用,但您无法更改其代码,否则您不需要完整的 OData 元数据。最多您需要odata.metadata=minimal 为使用继承的部分 REST API 包含类型注释(例如,在为索引器配置分析器、技能或更改/删除检测策略时)。

【讨论】:

谢谢。我们能够让它与 HTTP 标头一起工作。我们将 API 与启用 OData 的客户端(SF.com 外部数据对象 ~ SF 内的虚拟实体)一起使用。我们正在分析 odata.metadata=minimal 对于连接器是否足够。

以上是关于Azure 搜索索引的 OData API 不返回元数据的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法确定 Azure 认知搜索中的索引器索引了哪些文件?

无法从 Azure 存储表中获取所有项目

如何使用 OData 筛选器筛选 Azure 表存储中的布尔值?

具有 OWIN 自托管的 Web API 无类型 OData 服务返回 406 Not Acceptable

web api odata:$select 不工作

Azure搜索索引器运行操作表示429错误