Удаление всех документов из индекса/типа без удаления типа
Я знаю, что можно удалить все документы определенного типа с помощью 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": {}
}
}