Поиск Azure не удаляет данные после запуска индексатора - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть файл в хранилище 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" }
}   

myтело индекса:

{
    "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 и получать результат.

, но если яудалите folder/new/data1.json из хранилища больших двоичных объектов, запустите индексатор и попробуйте выполнить поиск na и ha, но я все равно получу результаты.

Я обнаружил, что если я удаляю индексатор и воссоздаю его na и ha уходит от поиска.

Есть ли способ удалить предыдущие данные без удаления индексатора?

Ответы [ 2 ]

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

Удаление документов с использованием индексаторов немного сложнее, особенно когда ваш BLOB-объект содержит несколько документов;если вы удалите BLOB-объект напрямую, индексатор не увидит BLOB-объект и не попытается удалить что-либо из индекса.

Чтобы индексатор удалял документы, необходимо использовать Soft Delete Delete.политика обнаружения , например:

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

Если вы хотите удалить документ, добавьте "IsDeleted": true к объекту JSON.После того, как все документы в BLOB-объекте были мягко удалены , а удаление было занято индексатором , только тогда вы можете выполнить полное удаление и удалить BLOB-объект.

Здесь есть одна тонкость:что вы не должны добавлять / удалять / переупорядочивать элементы массива, поскольку вы используете идентификатор документа по умолчанию, который зависит от пути BLOB-объекта и индекса массива.Если вы используете поле name в качестве ключа, то у вас будет возможность делать частичные жесткие удаления внутри большого двоичного объекта.

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

Боюсь, вам нужно будет удалить записи из индекса самостоятельно.Посмотрите на Добавление, обновление или удаление документов (API REST службы поиска Azure) , как это можно сделать с помощью HTTP запросов с использованием такого инструмента, как Почтальон .

Надеюсь, это поможет!

...