Удаление документов типа в Elasticsearch

Я хочу удалить все документы, индексированные внутри типа в Elasticsearch, используя HTTP / REST api, но я не хочу удалять сопоставление для этого типа

Как я могу построить запрос в URL-адресе для этого?

7 ответов


перед выполнением команды состояние индекса/отображения; (скриншоты взяты из плагин Elasticsearch head веб-интерфейс)

enter image description here

enter image description here

enter image description here


простое удаление по запросу с запросом match_all должно сделать трюк. Вы можете получить дополнительную информацию здесь:

удалить по запросу api

кроме того, вы можете удалить весь тип и использовать api шаблона. Просто поместите файл в папку config / templates/, содержащую ваш шаблон, и вы никогда его не потеряете. Сопоставление действительно будет потеряно, когда вы удалите сопоставление, но шаблон будет повторно использован, как только вы индексируете что-то снова. Вот еще информация:

API-интерфейс шаблона

EDIT: новый api удаления: https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-delete.html


С помощью следующей команды в плагине Elasticsearch head я смог удалить все документы типа logs С logstash индекс без удаления сопоставление:

{"query":{"match_all":{}}}

Deleting documents with Elasticsearch head plugin

чтобы освободить место на диске, вы также должны оптимизировать индекс (действия - >оптимизировать для индекса logstash в головном плагине) после удаления документов.


предыдущие ответы не будут работать с самой последней версии Elasticsearch. "Удалить по запросу" устарело от Elasticsearch 2.0. Elasticsearch в документации говорится, что это может вызвать OutOfMemoryError во время параллельного индексирования и может привести к несогласованности первичного и реплики. Если вы хотите следить за историей вопроса в Github.

теперь требуется несколько шагов для удаления всех документов из type.

  1. найти все идентификаторы документа, который необходимо удалить. Наиболее эффективным способом выполнения этой операции является использование scroll / scan API чтобы найти все соответствующие идентификаторы для данного типа.

  2. выполните массовый запрос на удаление документов по идентификаторам. Пример приведен ниже.

    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" }
    }
}

использование:

curl -XDELETE 'http://{server}/{index_name}/{type_name}/'

(например,документация)