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

时间:2016-04-03 21:51:51

标签: change-tracking azure-search

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

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

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

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

[更新 - 已解决]

当Eugene的回答突出显示时,问题是Azure Search跟踪的sql表有一个未映射到Azure搜索键的主键(我们使用另一个唯一列作为azure键代替)。使用" SQL集成更改跟踪策略"模式,因为索引器无法引用已删除的行(如果在删除sql跟踪表中的某些行后重新发出索引操作,则索引器将失败。)

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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