Поиск Azure удаляет данные, которых нет в источнике данных - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть файл в хранилище больших двоичных объектов 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 to

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

        }
    }
]

только что запущенный индексатор только перезаписывает

{
    "name": "a",
    "data": {
       "1":"something1",
       "2":"something2"

    }
}

, но

{
    "name": "b",
    "data": {
        "1":"something1",
        "2":"something2"
    }
}

все еще остается.Значение b по-прежнему доступно для поиска.

Что я могу сделать, чтобы удалить b?

Более важно Что делать, когда файл источника данных изменяется и данные индекса должны быть измененысоответственно?Удаленные данные из источника данных должны быть удалены из индекса, а новые данные в источнике данных должны быть проиндексированы.

1 Ответ

0 голосов
/ 08 декабря 2018

Nafis,

Вы должны рассмотреть вопрос о добавлении политики мягкого удаления .Простое удаление данных из источника данных не означает, что существующие записи удаляются.Если вы добавите поле «IsDeleted» в объект json, установите для него значение true и снова запустите индексатор, то запись будет удалена

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

После повторного запуска индексатора вы можете безопасно удалитьобъект "b" из вашего массива json.Я рекомендую убедиться в том, что ваш индексатор работает по расписанию , поэтому по истечении определенного периода времени автоматически удаляются удаления.

Пожалуйста, дайте мне знать, если у вас есть дополнительные вопросы.

Matt

...