Должны быть лучшие / более простые способы сделать это с помощью безболезненных сценариев, но это то, что я еще не пробовал.
Опять же, я предполагаю, что ваши документы не содержат никакого поля timestamp , которое отслеживает, когда документ был создан / обновлен, в противном случае вы можете выполнить Delete By Query API с использованием метки времени, после переиндексации от источника к месту назначения.
В приведенной ниже методике используются функции Ingest API и Reindex asticsearch
Допустим, у вас есть
- исходный индекс - indexA
- dest index - indexB
Создать два конвейера загрузки
PUT _ingest/pipeline/pipeline_one
{
"description" : "pipeline from indexB to intermediate index",
"processors" : [
{
"set" : {
"field": "tempField",
"value": "default"
}
}
]
}
PUT _ingest/pipeline/pipeline_two
{
"description" : "pipeline from indexA to intermediate index",
"processors" : [
{
"set" : {
"field": "tempField",
"value": "update"
}
}
]
}
Переиндексировать из indexB во временный indexC.
POST _reindex
{
"source": {
"index": "indexB"
},
"dest": {
"index": "indexC",
"pipeline": "pipeline_one"
}
}
Переиндексировать из indexA во временный indexC
POST _reindex
{
"source": {
"index": "indexA"
},
"dest": {
"index": "indexC",
"pipeline": "pipeline_two"
}
}
Таким образом, теперь вы знаете, что документы, которые не являютсяможно удалить, выполнив удаление по запросу, и если значение tempField по-прежнему по умолчанию .
POST indexc/_delete_by_query
{
"query": {
"match": {
"tempField": "default"
}
}
}
На данный момент вы можете пойти дальше и удалить индекс назначения.
Пересоздайте индекс назначения (сначала сделайте резервную копию) и создайте нижеследующий конвейер для использования от промежуточного индекса до места назначения, а также удалите поле tempField, чтобы сохранить ваше отображение.
PUT _ingest/pipeline/pipeline_three
{
"description" : "pipeline from intermediate to destination index",
"processors" : [
{
"remove" : {
"field": "tempField"
}
}
]
}
POST _reindex
{
"source": {
"index": "indexC"
},
"dest": {
"index": "indexB",
"pipeline": "pipeline_three"
}
}