Я хочу удалить все документы, индексированные в типе в Elasticsearch, используя HTTP/REST api, но я не хочу удалять сопоставление для этого типа
Как я могу создать запрос в URL-адресе, чтобы сделать это?
Я хочу удалить все документы, индексированные в типе в Elasticsearch, используя HTTP/REST api, но я не хочу удалять сопоставление для этого типа
Как я могу создать запрос в URL-адресе, чтобы сделать это?
Перед выполнением команды состояние индекса/отображения; (скриншоты, взятые из веб-интерфейса плагина elasticsearch head)
Команда
curl -XDELETE 'http://localhost:9200/publishercategoryeu/autocomplete/_query' -d '
{
"query": {
"bool": {
"must": [
{
"match_all": {}
}
]
}
}
}
'
Результат
После выполнения команды состояние индекса/отображения;
Как мы видим, мы удалили все документы, индексированные внутри типа (сопоставление) без индекса или типа (сопоставления).
Простое удаление по запросу с запросом match_all должно сделать трюк. Вы можете получить дополнительную информацию здесь:
В качестве альтернативы вы можете удалить весь тип и использовать шаблон api. Просто напишите файл в своей папке config/templates/, содержащей ваш шаблон, и вы никогда не потеряете его. Отображение действительно будет потеряно, когда вы удалите сопоставление, но шаблон будет повторно использован, как только вы снова индексируете что-то. Вот еще информация:
EDIT: новое удаление api: https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-delete.html
С помощью следующей команды в плагине заголовка elasticsearch я смог удалить все документы типа logs
из индекса logstash
без удаления сопоставления:
{"query":{"match_all":{}}}
Чтобы освободить место на диске, вы также должны оптимизировать индекс (Actions- > Optimize для индекса logstash
в плагине головы) после удаления документов.
Предыдущие ответы не будут работать с последней версией Elasticsearch
. "Удалить по запросу" было устарело от Elasticsearch 2.0
. Документация Elasticsearch
говорит о том, что при параллельной индексации он может вызвать OutOfMemoryError и может привести к непоследовательности первичной и реплики. Если вы хотите следить за историей проблемы в Github.
Теперь для удаления всех документов из type
выполняется несколько шагов.
Найдите все идентификаторы документа, которые необходимо удалить. Наиболее эффективным способом выполнения этой операции является использование scroll/scan API, чтобы найти все соответствующие идентификаторы для данного типа.
Выполните массовый запрос для удаления документов с помощью идентификаторов. Пример, приведенный ниже.
curl -XPOST 'http://localhost:9200/_bulk' -d '
{ "delete": { "_index": "index", "_type": "type", "_id": "1"}
{ "delete": { "_index": "index", "_type": "type", "_id": "2"}'
Обратите внимание, что если вы предоставляете ввод текстового файла для завивки, должен использовать флаг --data-binary
вместо обычного -d
.
Если вы хотите сделать это в golang, используя библиотеку olviere/elastic, вы можете использовать этот код, если у вас есть клиент yourClient
и yourIndex
и yourType
:
bq := elastic.NewBoolQuery()
bq.Must(elastic.NewMatchAllQuery())
_, err := elastic.NewDeleteByQueryService(yourClient).
Index(yourIndex).
Type(yourType).
Query(bq).
Do()
$ curl -XDELETE 'http://localhost:9200/twitter/tweet/_query?q=user:kimchy'
$ curl -XDELETE 'http://localhost:9200/twitter/tweet/_query' -d '{
"query" : {
"term" : { "user" : "kimchy" }
}
}
использование:
curl -XDELETE 'http://{server}/{index_name}/{type_name}/'
(как в документации)