我在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" } }
}
创建后,我可以搜索na
和ha
并获得结果。
但是如果我从Blob存储中删除folder/new/data1.json
并运行索引器并尝试搜索na
和ha
,我仍然会得到结果。
我发现,如果我删除索引器并重新创建它,na
和ha
就会远离搜索。
有什么方法可以删除以前的数据而不删除索引器?
答案 0 :(得分:3)
使用索引器删除文档有些棘手,尤其是当您的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中进行部分硬删除。
答案 1 :(得分:1)
恐怕您需要自行删除索引中的条目。 看一下Add, Update or Delete Documents (Azure Search Service REST API),了解如何使用诸如Postman之类的工具使用 HTTP 请求完成此操作。
希望有帮助!