Azure搜索索引器错误:“文档密钥不能丢失或为空。”

问题描述 投票:1回答:2

我在azure搜索中有一个索引,它通过Change Tracking同步到SQL server表。

我在对表进行一些更改后随机开始收到此错误(但并非总是如此,我似乎无法一致地复制它):

[
  {
    "key": null,
    "errorMessage": "Document key cannot be missing or empty."
  }
]

我检查了我的表,Azure Search用于密钥的列中没有空值(由sql not null约束强制执行)。除了删除索引并从头开始重新创建它之外,没有其他解决方案。甚至不删除所有文档并再次运行索引器可以消除错误。

[更新 - 解决]

正如Eugene的回答所强调的那样,问题是Azure Search跟踪的sql表有一个未映射到Azure搜索键的主键(我们使用另一个唯一列作为azure键)。使用“SQL集成更改跟踪策略”模式时不会发生这种情况,因为索引器无法引用已删除的行(如果在删除sql跟踪表中的某些行后重新发出索引操作,则索引器将失败)。

将sql表的主键设置为与索引的azure键相同后,即使在删除时,一切似乎也能顺利运行。

change-tracking azure-search
2个回答
1
投票

在这种情况下,搜索索引的键字段与表中的主键列不同。在这种情况下,不支持使用SQL集成更改跟踪策略进行删除跟踪,因为更改表不包含映射到索引键字段的列的值。但是,插入和更新将正常工作。

如果可能,请考虑使表和索引键相同。


0
投票

你的pk列中可能有空值,在azure sql中删除,删除table_name,其中pk =''

© www.soinside.com 2019 - 2024. All rights reserved.