3

当我从 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/

我究竟做错了什么?我错过了什么吗?

4

1 回答 1

2

我将描述我对SoftDeleteColumnDeletionDetectionPolicy数据源的理解。顾名思义,这是Soft Delete政策而不是Hard Delete政策。或者换句话说,数据仍然存在于您的数据源中,但它以某种方式被标记为已删除。

本质上,它的工作方式是定期Search Service查询数据源,并通过检查定义的属性值来检查被删除的条目SoftDeleteColumnDeletionDetectionPolicy。因此,在您的情况下,它将查询 DocumentDB 集合并找出isDeleted属性值为的文档true。然后它从索引中删除匹配的文档。

它不适合您的原因是因为您实际上是在删除记录,而不是更改isDeletedfrom falseto的值true。因此它永远不会找到匹配的值,并且不会对索引进行任何更改。

您可能会做的一件事是Hard Delete,您Soft Delete首先在 DocumentDB 集合中做,而不是做。当搜索服务重新索引您的数据时,由于文档是从源中软删除的,它将从索引中删除。然后,为了节省 DocumentDB 级别的存储成本,您只需稍后通过后台进程删除这些文档。

于 2015-08-25T09:26:48.410 回答