Удаление документов типа в Elasticsearch
Я хочу удалить все документы, индексированные в типе в Elasticsearch, используя HTTP/REST api, но я не хочу удалять сопоставление для этого типа
Как я могу создать запрос в URL-адресе, чтобы сделать это?
Ответы
Ответ 1
Перед выполнением команды состояние индекса/отображения; (скриншоты, взятые из веб-интерфейса плагина elasticsearch head)
![enter image description here]()
![enter image description here]()
![enter image description here]()
Команда
curl -XDELETE 'http://localhost:9200/publishercategoryeu/autocomplete/_query' -d '
{
"query": {
"bool": {
"must": [
{
"match_all": {}
}
]
}
}
}
'
Результат
![enter image description here]()
После выполнения команды состояние индекса/отображения;
![enter image description here]()
![enter image description here]()
![enter image description here]()
Как мы видим, мы удалили все документы, индексированные внутри типа (сопоставление) без индекса или типа (сопоставления).
Ответ 2
Простое удаление по запросу с запросом match_all должно сделать трюк.
Вы можете получить дополнительную информацию здесь:
удалить по запросу api
В качестве альтернативы вы можете удалить весь тип и использовать шаблон api. Просто напишите файл в своей папке config/templates/, содержащей ваш шаблон, и вы никогда не потеряете его. Отображение действительно будет потеряно, когда вы удалите сопоставление, но шаблон будет повторно использован, как только вы снова индексируете что-то. Вот еще информация:
шаблон api
EDIT: новое удаление api: https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-delete.html
Ответ 3
С помощью следующей команды в плагине заголовка elasticsearch я смог удалить все документы типа logs
из индекса logstash
без удаления сопоставления:
{"query":{"match_all":{}}}
![Deleting documents with Elasticsearch head plugin]()
Чтобы освободить место на диске, вы также должны оптимизировать индекс (Actions- > Optimize для индекса logstash
в плагине головы) после удаления документов.
Ответ 4
Предыдущие ответы не будут работать с последней версией 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
.
Ответ 5
Если вы хотите сделать это в golang, используя библиотеку olviere/elastic, вы можете использовать этот код, если у вас есть клиент yourClient
и yourIndex
и yourType
:
bq := elastic.NewBoolQuery()
bq.Must(elastic.NewMatchAllQuery())
_, err := elastic.NewDeleteByQueryService(yourClient).
Index(yourIndex).
Type(yourType).
Query(bq).
Do()
Ответ 6
$ curl -XDELETE 'http://localhost:9200/twitter/tweet/_query?q=user:kimchy'
$ curl -XDELETE 'http://localhost:9200/twitter/tweet/_query' -d '{
"query" : {
"term" : { "user" : "kimchy" }
}
}
Ответ 7
использование:
curl -XDELETE 'http://{server}/{index_name}/{type_name}/'
(как в документации)