DocumentDB и поиск Azure: документ, удаленный из documentDB, не обновляется в индексе поиска Azure

Когда я удаляю документ из 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/

Что я делаю неправильно? Я что-то упускаю?


person engel    schedule 25.08.2015    source источник


Ответы (1)


Я опишу то, что я понимаю о SoftDeleteColumnDeletionDetectionPolicy в источнике данных. Как следует из названия, это Soft Delete политика, а не политика Hard Delete. Или, другими словами, данные все еще находятся в вашем источнике данных, но каким-то образом помечены как удаленные.

По сути, это работает так: периодически Search Service запрашивает источник данных и проверяет удаленные записи, проверяя значение атрибута, определенного в SoftDeleteColumnDeletionDetectionPolicy. Итак, в вашем случае он запросит коллекцию DocumentDB и найдет документы, для которых значение атрибута isDeleted равно true. Затем он удаляет соответствующие документы из индекса.

Причина, по которой это не работает для вас, заключается в том, что вы фактически удаляете записи вместо того, чтобы изменять значение isDeleted с false на true. Таким образом, он никогда не находит совпадающих значений, и индекс не изменяется.

Одна вещь, которую вы могли бы сделать, - это вместо того, чтобы делать Hard Delete, вы для начала сделаете Soft Delete в своей коллекции DocumentDB. Когда служба поиска повторно индексирует ваши данные, поскольку документ удален из источника, он будет удален из индекса. Затем, чтобы сэкономить на хранении на уровне DocumentDB, вы просто удаляете эти документы через некоторое время в фоновом режиме.

person Gaurav Mantri    schedule 25.08.2015
comment
Спасибо, это работает! Я добавил в документ атрибут isDeleted = true, и он исчез из результатов поиска. - person engel; 25.08.2015