DocumentDB 和 Azure 搜索:从 documentDB 中删除的文档不会在 Azure 搜索索引中更新
DocumentDB and Azure Search: Document removed from documentDB isn't updated in Azure Search index
当我从 DocumentDB 中删除文档时,它不会从 Azure 搜索索引中删除。如果我更改文档中的某些内容,索引将更新。
我不太确定我应该如何在数据源中使用这个 "SoftDeleteColumnDeletionDetectionPolicy"。
我的数据源如下:
{
"name": "mydocdbdatasource",
"type": "documentdb",
"credentials": {
"connectionString": "AccountEndpoint=https://myDocDbEndpoint.documents.azure.com;AccountKey=myDocDbAuthKey;Database=myDocDbDatabaseId"
},
"container": {
"name": "myDocDbCollectionId",
"query": "SELECT s.id, s.Title, s.Abstract, s._ts FROM Sessions s WHERE s._ts > @HighWaterMark"
},
"dataChangeDetectionPolicy": {
"@odata.type": "#Microsoft.Azure.Search.HighWaterMarkChangeDetectionPolicy",
"highWaterMarkColumnName": "_ts"
},
"dataDeletionDetectionPolicy": {
"@odata.type": "#Microsoft.Azure.Search.SoftDeleteColumnDeletionDetectionPolicy",
"softDeleteColumnName": "isDeleted",
"softDeleteMarkerValue": "true"
}
}
而且我遵循了本指南:
https://azure.microsoft.com/en-us/documentation/articles/documentdb-search-indexer/
我做错了什么?我错过了什么吗?
我将在数据源中描述我对SoftDeleteColumnDeletionDetectionPolicy
的理解。顾名思义,它是 Soft Delete
政策而不是 Hard Delete
政策。或者换句话说,数据仍然存在于您的数据源中,但它以某种方式被标记为已删除。
基本上它的工作方式是周期性的 Search Service
将查询数据源并通过检查 SoftDeleteColumnDeletionDetectionPolicy
中定义的属性值来检查被删除的条目。因此,在您的情况下,它将查询 DocumentDB 集合并找出 isDeleted
属性值为 true
的文档。然后从索引中删除匹配的文档。
它对您不起作用的原因是因为您实际上是在删除记录,而不是将 isDeleted
的值从 false
更改为 true
。因此它永远不会找到匹配的值并且不会对索引进行任何更改。
您可以做的一件事是,您可以先在 DocumentDB 集合中执行 Soft Delete
,而不是执行 Hard Delete
。当搜索服务重新索引您的数据时,由于文档已从源中软删除,因此将从索引中删除。然后为了节省 DocumentDB 级别的存储成本,您只需在一段时间后通过后台进程删除这些文档。
当我从 DocumentDB 中删除文档时,它不会从 Azure 搜索索引中删除。如果我更改文档中的某些内容,索引将更新。 我不太确定我应该如何在数据源中使用这个 "SoftDeleteColumnDeletionDetectionPolicy"。
我的数据源如下:
{
"name": "mydocdbdatasource",
"type": "documentdb",
"credentials": {
"connectionString": "AccountEndpoint=https://myDocDbEndpoint.documents.azure.com;AccountKey=myDocDbAuthKey;Database=myDocDbDatabaseId"
},
"container": {
"name": "myDocDbCollectionId",
"query": "SELECT s.id, s.Title, s.Abstract, s._ts FROM Sessions s WHERE s._ts > @HighWaterMark"
},
"dataChangeDetectionPolicy": {
"@odata.type": "#Microsoft.Azure.Search.HighWaterMarkChangeDetectionPolicy",
"highWaterMarkColumnName": "_ts"
},
"dataDeletionDetectionPolicy": {
"@odata.type": "#Microsoft.Azure.Search.SoftDeleteColumnDeletionDetectionPolicy",
"softDeleteColumnName": "isDeleted",
"softDeleteMarkerValue": "true"
}
}
而且我遵循了本指南: https://azure.microsoft.com/en-us/documentation/articles/documentdb-search-indexer/
我做错了什么?我错过了什么吗?
我将在数据源中描述我对SoftDeleteColumnDeletionDetectionPolicy
的理解。顾名思义,它是 Soft Delete
政策而不是 Hard Delete
政策。或者换句话说,数据仍然存在于您的数据源中,但它以某种方式被标记为已删除。
基本上它的工作方式是周期性的 Search Service
将查询数据源并通过检查 SoftDeleteColumnDeletionDetectionPolicy
中定义的属性值来检查被删除的条目。因此,在您的情况下,它将查询 DocumentDB 集合并找出 isDeleted
属性值为 true
的文档。然后从索引中删除匹配的文档。
它对您不起作用的原因是因为您实际上是在删除记录,而不是将 isDeleted
的值从 false
更改为 true
。因此它永远不会找到匹配的值并且不会对索引进行任何更改。
您可以做的一件事是,您可以先在 DocumentDB 集合中执行 Soft Delete
,而不是执行 Hard Delete
。当搜索服务重新索引您的数据时,由于文档已从源中软删除,因此将从索引中删除。然后为了节省 DocumentDB 级别的存储成本,您只需在一段时间后通过后台进程删除这些文档。