DeleteByQueryを使って特定のタイプからすべての文書を削除できることを私は知っています。
例:
curl -XDELETE 'http://localhost:9200/Twitter/Tweet/_query' -d '{
"query" : {
"term" : { "user" : "kimchy" }
}
}'
しかし、用語はありません。その用語からすべてのドキュメントを削除したいのですが、どんな用語でも関係ありません。これを達成するためのベストプラクティスは何ですか?空の用語は機能しません。
Query by deleteと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の実装により、削除されました。 ここを読んで
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": {}
}
}
John Petronesの回答に対するTorsten Engelbrechtのコメントが拡張されました。
curl -XDELETE 'http://localhost:9200/Twitter/Tweet/_query' -d
'{
"query":
{
"match_all": {}
}
}'
(Johnの返事は投票され回答として設定されているので、私はJohnの返事を編集したくありませんでした、そして私はエラーを紹介したかもしれません)
Elasticsearch 2.x以降では、ドキュメントがインデックスに残ってインデックスが破損するため、削除はできなくなりました。
次のクエリでtypeからドキュメントを削除できます。
POST /index/type/_delete_by_query
{
"query" : {
"match_all" : {}
}
}
このクエリはKibanaとElastic 5.5.2でテストしました
ES2 +に関するメモ
ES 1.5.3から、query-by-query APIは廃止予定となり、ES 2.0から完全に削除されました。
APIの代わりに、 クエリによる削除はプラグインになりました です。
Delete By Queryプラグインを使用するには、クラスタのすべてのノードにプラグインをインストールする必要があります。
Sudo bin/plugin install delete-by-query
インストール後にすべてのノードを再起動する必要があります。
プラグインの使い方は古いAPIと同じです。あなたはあなたのクエリで何かを変更する必要はありません - このプラグインは単にそれらを機能させるでしょう。
* APIが削除された理由についての完全な情報は、もっと読むことができます ここ 。
あなたはこれらの選択肢があります:
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はインデックス名、usersは型です。
(評判がコメントするほど高くない)John Petroneの答えの2番目の部分は機能します - 問い合わせは不要です。そのタイプとそのタイプに含まれるすべてのドキュメントが削除されますが、新しいドキュメントをそのタイプにインデックス付けするときはいつでも再作成できます。
明確にするために:$ curl -XDELETE 'http://localhost:9200/Twitter/Tweet'
注:これはするマッピングを削除する!しかし、前述したように、新しい文書を作成することで簡単に再マッピングできます。
In Kibanaコンソール:
POST calls-xin-test-2/_delete_by_query
{
"query": {
"match_all": {}
}
}
Elasticsearch REST Requestsの厳密なコンテンツタイプチェック のため、上記の回答はES 6.2.2では機能しません。私が使用してしまったcurl
コマンドはこれです:
curl -H'Content-Type: application/json' -XPOST 'localhost:9200/yourindex/_doc/_delete_by_query?conflicts=proceed' -d' { "query": { "match_all": {} }}'
これにカップルセントを追加するだけです。
上に挙げた "delete_by_query" は、elasticsearch 2.xではまだプラグインとして利用可能です。
最新の今後のバージョン5.xでは、 "query by apiによる削除" に置き換えられます。
Elasticsearch 2.3のオプション
action.destructive_requires_name: true
elasticsearch.ymlで旅行をする
curl -XDELETE http://localhost:9200/Twitter/Tweet
日付に合わせて文書を削除したい場合あなたはキバナコンソールを使うことができます(v.6.1.2)
POST index_name/_delete_by_query
{
"query" : {
"range" : {
"sendDate" : {
"lte" : "2018-03-06"
}
}
}
}