gpt4 book ai didi

Azure 搜索在索引器运行后不会删除数据

转载 作者:行者123 更新时间:2023-12-03 20:16:19 24 4
gpt4 key购买 nike

我在 blob 存储 folder/new/data1.json 中有一个文件。

data1 包含 json 数组。

[   
{
"name": "na",
"data": {
"1":"something1",
"2":"something2"

}
},
{
"name": "ha",
"data": {
"1":"something1",
"2":"something2"
}
}
]

我的数据源主体:

{
"name" : "datasource",
"type" : "azureblob",
"credentials" : { "connectionString" : "MyStorageConnStrning" },
"container" : { "name" : "mycontaner", "query" : "folder/new" }
}

我的索引正文:

{
"name" : "index",
"fields": [
{ "name": "id", "type": "Edm.String", "key": true, "searchable": false },
{ "name": "name", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": true, "facetable": true},
{ "name": "data", "type": "Edm.String", "searchable": false}
]
}

索引器主体:

{
"name" : "indexer",
"dataSourceName" : "datasource",
"targetIndexName" : "index",
"parameters" : { "configuration" : { "parsingMode" : "jsonArray" } }
}

创建后,我可以搜索 naha 并获取结果。

但是如果我从 blob 存储中删除 folder/new/data1.json 并运行索引器并尝试搜索 naha我仍然得到结果。

我发现,如果我删除索引器并重新创建它,naha 就会从搜索中消失。

有没有办法在不删除索引器的情况下删除以前的数据?

最佳答案

使用索引器删除文档有点棘手,特别是当您的 blob 包含多个文档时;如果直接删除该 blob,则索引器将看不到该 blob,也不会尝试从索引中删除任何内容。

要使索引器删除文档,您需要使用 soft delete deletion detection policy ,例如:

{
"@odata.type": "#Microsoft.Azure.Search.SoftDeleteColumnDeletionDetectionPolicy",
"softDeleteColumnName": "IsDeleted",
"softDeleteMarkerValue": "true"
}

当您想要删除文档时,请将 "IsDeleted": true 添加到 JSON 对象。在 Blob 中的所有文档都被软删除后并且索引器已拾取删除内容后,您才能执行硬删除并删除该 Blob。

这里的一个微妙之处是,您不得添加/删除/重新排列数组的元素,因为您使用的是默认文档 ID,这取决于 blob 路径和数组索引。如果您使用 name 字段作为键,那么您将可以灵活地在 blob 内执行部分硬删除。

关于Azure 搜索在索引器运行后不会删除数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53653352/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com