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



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



пример:



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


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



ссылка на deleteByQuery

770   14  

14 ответов:

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

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

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

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

плагин Delete-By-Query был удален в пользу новой реализации Delete by Query API в core. читать здесь

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

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

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

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

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

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

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

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

вы можете удалить документы из типа со следующим запросом:

POST /index/type/_delete_by_query
{
    "query" : { 
        "match_all" : {}
    }
}

Я тестировал этот запрос в Kibana и Elastic 5.5.2

Примечание ES2+

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

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

для использования плагина Delete By Query необходимо установить плагин на всех узлах кластера:

sudo bin/plugin install delete-by-query

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


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


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

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

просто для уточнения: $ curl -XDELETE 'http://localhost:9200/twitter/tweet'

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

In платформы Kibana

у вас есть такие варианты:

1) удалить весь индекс:

curl -XDELETE 'http://localhost:9200/indexName'             

пример:

curl -XDELETE 'http://localhost:9200/mentorz'

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

2) удалить запрос для тех, кто соответствует:

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

здесь mentorz - это имя индекса и пользователи тип

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

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

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

Elasticsearch 2.3 опция

    action.destructive_requires_name: true

в elasticsearch.yml do the trip

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

Если вы хотите удалить документ по дате. Вы можете использовать консоль kibana (V. 6. 1. 2)

POST index_name/_delete_by_query
{
      "query" : {
              "range" : {
                 "sendDate" : {
                     "lte" : "2018-03-06"
                              }
                        }
                  }
}

приведенные выше ответы больше не работают с ES 6.2.2 из-за строгая проверка типа содержимого для запросов Elasticsearch REST. Элемент curl команда, которую я использовал этот:

curl -H'Content-Type: application/json' -XPOST 'localhost:9200/yourindex/_doc/_delete_by_query?conflicts=proceed' -d' { "query": { "match_all": {} }}'

Comments

    Ничего не найдено.