【问题标题】:Azure Search remove data that is not in data-sourceAzure 搜索删除不在数据源中的数据
【发布时间】:2018-12-08 05:51:29
【问题描述】:

我在 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" } }
}

创建后我可以搜索ab 并获得结果。

现在我已将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

更珍贵的是,当数据源文件发生变化,索引数据也需要相应变化时怎么办?从数据源中删除的数据需要从索引中删除,数据源中的新数据需要索引。

【问题讨论】:

    标签: azure azure-cognitive-search


    【解决方案1】:

    纳菲斯,

    您应该考虑添加soft delete policy。仅从数据源中删除数据并不意味着删除现有记录。如果您向 json 对象添加了“IsDeleted”字段,将其设置为 true,然后再次运行索引器,则记录将被删除

    [   
        {
        "name": "a",
        "data": {
            "1":"something1",
            "2":"something2"
           }
        },
        {
        "name": "b",
        "data": {
            "1":"something1",
            "2":"something2"
          },
        "isDeleted": true
        }
    ]
    

    一旦您的索引器再次运行,您就可以安全地从 json 数组中删除“b”对象。我建议确保您的索引器 is on a schedule 以便在一段时间后自动提取删除。

    如果您还有其他问题,请告诉我。

    马特

    【讨论】:

    • 如果我删除索引,重新创建它并运行索引器,它也可以工作吗?
    • 是的,索引器会再次索引数组中的所有数据
    猜你喜欢
    • 2019-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多