Azure Search Indexer error: "Document key cannot be missing or empty."
Azure Search Indexer error: "Document key cannot be missing or empty."
我在 Azure 搜索中有一个索引,它通过更改跟踪同步到 SQL 服务器 table。
我对 table 进行了一些更改后随机开始出现此错误(但并非总是如此,不幸的是我似乎无法始终如一地复制它):
[
{
"key": null,
"errorMessage": "Document key cannot be missing or empty."
}
]
我检查了我的 table,Azure 搜索用于键的列中没有空值(由 sql 非空约束强制执行)。除了删除索引并从头开始重新创建之外,没有其他解决方案。甚至不删除所有文档并再次 运行 索引器就可以消除错误。
[更新 - 已解决]
正如 Eugene 的回答所强调的那样,问题是 Azure 搜索跟踪的 sql table 有一个未映射到 Azure 搜索键的主键(我们使用的是另一个唯一列作为天蓝色的密钥)。使用 "SQL Integrated Change Tracking Policy" 模式时不会发生这种情况,因为索引器无法引用已删除的行(如果在删除 sql 跟踪的 table 中的某些行后重新发出索引操作,索引器将失败)。
将 sql table 的主键设置为与索引的 azure 键相同后,一切似乎 运行 顺利,即使在删除时也是如此。
在这种情况下,搜索索引的键字段与 table 中的主键列不同。在这种情况下,不支持使用 SQL 集成更改跟踪策略的删除跟踪,因为更改 table 不包含映射到索引键字段的列的值。不过,插入和更新将正常工作。
如果可能,考虑使 table 和索引键相同。
您的 pk 列中可能有空值,
在天蓝色中删除 sql,删除 table_name where pk = ''
我在 Azure 搜索中有一个索引,它通过更改跟踪同步到 SQL 服务器 table。
我对 table 进行了一些更改后随机开始出现此错误(但并非总是如此,不幸的是我似乎无法始终如一地复制它):
[
{
"key": null,
"errorMessage": "Document key cannot be missing or empty."
}
]
我检查了我的 table,Azure 搜索用于键的列中没有空值(由 sql 非空约束强制执行)。除了删除索引并从头开始重新创建之外,没有其他解决方案。甚至不删除所有文档并再次 运行 索引器就可以消除错误。
[更新 - 已解决]
正如 Eugene 的回答所强调的那样,问题是 Azure 搜索跟踪的 sql table 有一个未映射到 Azure 搜索键的主键(我们使用的是另一个唯一列作为天蓝色的密钥)。使用 "SQL Integrated Change Tracking Policy" 模式时不会发生这种情况,因为索引器无法引用已删除的行(如果在删除 sql 跟踪的 table 中的某些行后重新发出索引操作,索引器将失败)。
将 sql table 的主键设置为与索引的 azure 键相同后,一切似乎 运行 顺利,即使在删除时也是如此。
在这种情况下,搜索索引的键字段与 table 中的主键列不同。在这种情况下,不支持使用 SQL 集成更改跟踪策略的删除跟踪,因为更改 table 不包含映射到索引键字段的列的值。不过,插入和更新将正常工作。
如果可能,考虑使 table 和索引键相同。
您的 pk 列中可能有空值, 在天蓝色中删除 sql,删除 table_name where pk = ''