2016-04-03 81 views
1

我有一个天青搜索索引,通过变更跟踪同步到SQL服务器表。Azure搜索索引器错误:“文档密钥不能丢失或为空。”

我随机开始收到此错误后,我做出一些改变表(但不总是这样,我似乎无法始终如一地复制它不幸地):

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

我检查了我的桌子,有在Azure Search用于该密钥的列中没有空值(由sql not null约束强制执行)。没有其他解决方案,只能删除索引并从头开始重新创建索引。甚至没有删除所有的文件并再次运行索引器摆脱了错误。

[更新 - 已解决]

正如尤金的答案突出的问题是,通过Azure的搜索跟踪SQL表有不是映射到Azure的搜索键的主键(我们使用的是另一种独特的列作为天蓝色的键)。使用“SQL集成变化跟踪策略”模式时不会发生这种情况,因为索引器无法引用已删除的行(如果在删除sql跟踪表中的某些行后重新发布索引操作,索引器将失败)。

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

+0

有没有空字符串在列(“”)值的任何机会? –

+0

不,即使这样,我期望重组一个空表将解决问题,但错误保持不变。 – Francesco

+0

您提到您对表格进行了更改。你有没有更改主键列? –

回答

1

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

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

0

有可能是你的PK列空值, 删除蔚蓝SQL,删除table_name的其中pk =“”