Azure 搜索服务 REST API 删除错误:“文档密钥不能丢失或为空。”

Posted

技术标签:

【中文标题】Azure 搜索服务 REST API 删除错误:“文档密钥不能丢失或为空。”【英文标题】:Azure Search Service REST API Delete Error: "Document key cannot be missing or empty." 【发布时间】:2019-07-16 22:30:17 【问题描述】:

我在尝试使用 Azure Search Service REST API 删除 blob 存储 blob/文档时看到一些间歇性和奇怪的行为。它有时有效,有时我得到这个:

请求无效。详细信息:操作:0:文档键不能 丢失或为空。

一旦我开始收到此错误,当我尝试删除存储在该索引中的任何文档/blob 时,结果相同。我确实将“metadata_storage_path”列为我的索引键(见下文)。 我无法让查询再次成功,否则我将检查 Fiddler 中的差异。

我也尝试了以下方法,但没有成功:

    重置并重新运行关联的搜索索引器。 针对同一容器创建新的索引器和索引并从中删除。 创建新容器、索引器和索引并从中删除。

还有其他建议或想法吗?

【问题讨论】:

【参考方案1】:

复制/粘贴错误:“metadata_storage_name”应该是“metadata_storage_path”。

[在此处插入撞墙表情符号。]

【讨论】:

抱歉回复晚了。你还在遇到这些问题吗?如果是,您能否将您的服务名称通过电子邮件发送给我,以便我调查日志?我的电子邮件是我在 microsoft dot com 的用户名(不带 -MSFT)。谢谢【参考方案2】:

对于那些仍在寻找解决方案的人...

而不是id,

  
  "value": [  
      
      "@search.action": "delete",
      "id":"TDVRT0FPQXcxZGtTQUFBQUFBQUFBQT090fdf"
     
  ]  
 

使用摆脱你的文档来删除。

  
  "value": [  
      
      "@search.action": "delete",
      "rid":"TDVRT0FPQXcxZGtTQUFBQUFBQUFBQT090fdf"
     
  ]  
 

因为在创建搜索索引时,您可能选择了 rid 作为您的唯一 id 列。

注意:我们只能删除具有唯一 ID 列的文档。

【讨论】:

以上是关于Azure 搜索服务 REST API 删除错误:“文档密钥不能丢失或为空。”的主要内容,如果未能解决你的问题,请参考以下文章

Azure 使用 REST api 和托管标识创建 blob 容器 - 403 错误

如何修复“访问令牌来自错误的受众或资源。”尝试使用 MSAL 令牌访问 Azure 的 REST api 时

Azure blob 批量删除无法使用 rest API 删除多个文件

csharp .NET Core中的Azure通知中心REST API [读取/删除通道的所有注册]

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

REST Api 使用访问密钥到 Azure Blob 存储