Удаление всех документов из индекса/типа без удаления типа

Я знаю, что можно удалить все документы определенного типа с помощью deleteByQuery.

Пример:

curl -XDELETE 'http://localhost:9200/twitter/tweet/_query' -d '{
    "query" : {
        "term" : { "user" : "kimchy" }
    }
}'

Но у меня нет термина и просто хочу удалить все документы из этого типа, независимо от того, какой термин. Какова наилучшая практика для достижения этой цели? Пустой термин не работает.

Ссылка на deleteByQuery

Ответ 1

Я считаю, что если вы объедините удаление по запросу с совпадением, все, что он должен делать, что вы ищете, что-то вроде этого (используя ваш пример):

curl -XDELETE 'http://localhost:9200/twitter/tweet/_query' -d '{
    "query" : { 
        "match_all" : {}
    }
}'

Или вы можете просто удалить тип:

curl -XDELETE http://localhost:9200/twitter/tweet

Ответ 2

Плагин Delete-By-Query был удален в пользу новой реализации API-интерфейса "Удалить по Query API" в ядре. Читайте здесь

curl -XPOST 'localhost:9200/twitter/tweet/_delete_by_query?conflicts=proceed&pretty' -d'
{
    "query": {
        "match_all": {}
    }
}'

Ответ 3

Из ElasticSearch 5.x по умолчанию используется delete_by_query API

POST: http://localhost:9200/index/type/_delete_by_query

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

Ответ 4

Комментарий Торстена Энгельбрехта в комментарии Джона Петронеса расширен:

curl -XDELETE 'http://localhost:9200/twitter/tweet/_query' -d 
  '{
      "query": 
      {
          "match_all": {}
      }
   }'

(Я не хотел редактировать ответ Джона, поскольку он получил upvotes и задан как ответ, и я мог бы ввести ошибку)

Ответ 5

Начиная с Elasticsearch 2.x удаление больше не допускается, поскольку документы остаются в индексе, вызывая повреждение индекса.

Ответ 6

Примечание для ES2 +

Начиная с ES 1.5.3 API удаления по запросу устарел и полностью удаляется с ES 2.0

Вместо API, "Удалить по запросу" теперь является плагином.

Чтобы использовать плагин "Удалить по запросу", вы должны установить плагин на всех узлах кластера:

sudo bin/plugin install delete-by-query

Все узлы должны быть перезапущены после установки.


Использование плагина аналогично использованию старого API. Вам не нужно ничего менять в своих запросах - этот плагин просто заставит их работать.


* Для получения полной информации о том, почему API был удален, вы можете прочитать здесь.

Ответ 7

(Репутация недостаточно высокая, чтобы комментировать) Вторая часть ответа Джона Петрона - нет необходимости в запросе. Он удалит тип и все документы, содержащиеся в этом типе, но его можно просто создать заново, когда вы индексируете новый документ для этого типа.

Просто уточнить: $ curl -XDELETE 'http://localhost:9200/twitter/tweet'

Примечание: это удаляет сопоставление! Но, как упоминалось ранее, его можно легко перерисовать, создав новый документ.

Ответ 8

Просто добавьте пару центов к этому.

"delete_by_query" , упомянутый выше, по-прежнему доступен как плагин в elasticsearch 2.x.

Хотя в последней предстоящей версии 5.x он будет заменен на "удалить по запросу api"

Ответ 9

Elasticsearch 2.3 вариант

    action.destructive_requires_name: true

в elasticsearch.yml совершить поездку

    curl -XDELETE http://localhost:9200/twitter/tweet

Ответ 10

1.) Использование curl: - Удалить весь индекс: -

curl -XDELETE 'localhost: 9200/indexName? pretty'
пример) curl -XDELETE 'localhost: 9200/mentorz? pretty'

для более подробной информации вы можете найти здесь - https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-delete-index.html

2.) Использование Delete by Query: - Удалить весь индекс: -

curl -XDELETE 'http://localhost:9200/mentorz/users/_query' -d
{
     "Запрос":
       {
          "match_all": {}
       }
 } '

* Здесь имя указателя mentorz и тип пользователя

Ответ 11

В Kibana Консоль:

POST calls-xin-test-2/_delete_by_query
{
  "query": { 
    "match_all": {}
  }
}