Azure 搜索删除不在数据源中的数据
Azure Search remove data that is not in data-source
我在 blob 存储中有一个文件 folder/new/data.json
它包含 json 个数组。
[
{
"name": "a",
"data": {
"1":"something1",
"2":"something2"
}
},
{
"name": "b",
"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" } }
}
创建后我可以搜索 a
和 b
并获得结果。
现在我已经将 folder/new/data.json
修改为
[
{
"name": "aa",
"data": {
"1":"something1",
"2":"something2"
}
}
]
只是 运行 索引器只覆盖
{
"name": "a",
"data": {
"1":"something1",
"2":"something2"
}
}
但是
{
"name": "b",
"data": {
"1":"something1",
"2":"something2"
}
}
仍然存在。意思是 b
仍然可以搜索。
我该怎么做才能删除 b
?
更珍贵当数据源文件改变,索引数据需要相应改变时怎么办?从数据源中删除的数据需要从索引中删除,数据源中的新数据需要建立索引。
纳菲斯
您应该考虑添加一个 soft delete policy。仅从数据源中删除数据并不意味着删除现有记录。如果您将 "IsDeleted" 字段添加到 json 对象,将其设置为 true,然后再次 运行 您的索引器,那么该记录将被删除
[
{
"name": "a",
"data": {
"1":"something1",
"2":"something2"
}
},
{
"name": "b",
"data": {
"1":"something1",
"2":"something2"
},
"isDeleted": true
}
]
一旦您的索引器再次具有 运行,您就可以安全地从 json 数组中删除 "b" 对象。我建议确保您的索引器 is on a schedule 以便在一段时间后自动提取删除内容。
如果您还有其他问题,请告诉我。
马特
我在 blob 存储中有一个文件 folder/new/data.json
它包含 json 个数组。
[
{
"name": "a",
"data": {
"1":"something1",
"2":"something2"
}
},
{
"name": "b",
"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" } }
}
创建后我可以搜索 a
和 b
并获得结果。
现在我已经将 folder/new/data.json
修改为
[
{
"name": "aa",
"data": {
"1":"something1",
"2":"something2"
}
}
]
只是 运行 索引器只覆盖
{
"name": "a",
"data": {
"1":"something1",
"2":"something2"
}
}
但是
{
"name": "b",
"data": {
"1":"something1",
"2":"something2"
}
}
仍然存在。意思是 b
仍然可以搜索。
我该怎么做才能删除 b
?
更珍贵当数据源文件改变,索引数据需要相应改变时怎么办?从数据源中删除的数据需要从索引中删除,数据源中的新数据需要建立索引。
纳菲斯
您应该考虑添加一个 soft delete policy。仅从数据源中删除数据并不意味着删除现有记录。如果您将 "IsDeleted" 字段添加到 json 对象,将其设置为 true,然后再次 运行 您的索引器,那么该记录将被删除
[
{
"name": "a",
"data": {
"1":"something1",
"2":"something2"
}
},
{
"name": "b",
"data": {
"1":"something1",
"2":"something2"
},
"isDeleted": true
}
]
一旦您的索引器再次具有 运行,您就可以安全地从 json 数组中删除 "b" 对象。我建议确保您的索引器 is on a schedule 以便在一段时间后自动提取删除内容。
如果您还有其他问题,请告诉我。
马特