Удаление документов типа в Elasticsearch
Я хочу удалить все документы, индексированные внутри типа в Elasticsearch, используя HTTP / REST api, но я не хочу удалять сопоставление для этого типа
Как я могу построить запрос в URL-адресе для этого?
7 ответов
перед выполнением команды состояние индекса/отображения; (скриншоты взяты из плагин Elasticsearch head веб-интерфейс)
простое удаление по запросу с запросом match_all должно сделать трюк. Вы можете получить дополнительную информацию здесь:
кроме того, вы можете удалить весь тип и использовать api шаблона. Просто поместите файл в папку config / templates/, содержащую ваш шаблон, и вы никогда его не потеряете. Сопоставление действительно будет потеряно, когда вы удалите сопоставление, но шаблон будет повторно использован, как только вы индексируете что-то снова. Вот еще информация:
EDIT: новый api удаления: https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-delete.html
С помощью следующей команды в плагине Elasticsearch head я смог удалить все документы типа logs
С logstash
индекс без удаления сопоставление:
{"query":{"match_all":{}}}
чтобы освободить место на диске, вы также должны оптимизировать индекс (действия - >оптимизировать для индекса 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"}'
обратите внимание, что если вы предоставляете ввод текстового файла для curl, вы должны использовать --data-binary
флаг вместо обычного -d
.
если вы хотите сделать это в golang, с помощью "olviere/эластичный библиотека", вы можете использовать этот код, если у вас есть клиент 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" }
}
}