Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 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}/'

(как в документации)