web-dev-qa-db-ja.com

タイプを削除せずにインデックス/タイプからすべての文書を削除します

DeleteByQueryを使って特定のタイプからすべての文書を削除できることを私は知っています。

例:

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

しかし、用語はありません。その用語からすべてのドキュメントを削除したいのですが、どんな用語でも関係ありません。これを達成するためのベストプラクティスは何ですか?空の用語は機能しません。

deleteByQueryへのリンク

128
Michael Leiss

Query by deleteとmatch allを組み合わせると、あなたが探していることができるはずです。

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

あるいは、単に型を削除することもできます。

curl -XDELETE http://localhost:9200/Twitter/Tweet
154
John Petrone

Delete-By-Queryプラグインは、コア内の新しいDelete By Query APIの実装により、削除されました。 ここを読んで

curl -XPOST 'localhost:9200/Twitter/Tweet/_delete_by_query?conflicts=proceed&pretty' -d'
{
    "query": {
        "match_all": {}
    }
}'
57
Iqbal

ElasticSearch 5.x以降、デフォルトでdelete_by_query APIがあります

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

{
    "query": { 
        "match_all": {}
    }
}
46
Jay Shah

John Petronesの回答に対するTorsten Engelbrechtのコメントが拡張されました。

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

(Johnの返事は投票され回答として設定されているので、私はJohnの返事を編集したくありませんでした、そして私はエラーを紹介したかもしれません)

16
Brimstedt

Elasticsearch 2.x以降では、ドキュメントがインデックスに残ってインデックスが破損するため、削除はできなくなりました。

13
Fabio Fumarola

次のクエリでtypeからドキュメントを削除できます。

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

このクエリはKibanaとElastic 5.5.2でテストしました

11
Luka Lopusina

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が削除された理由についての完全な情報は、もっと読むことができます ここ

5
Dekel

あなたはこれらの選択肢があります:

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は型です。

4
NeeruSingh

(評判がコメントするほど高くない)John Petroneの答えの2番目の部分は機能します - 問い合わせは不要です。そのタイプとそのタイプに含まれるすべてのドキュメントが削除されますが、新しいドキュメントをそのタイプにインデックス付けするときはいつでも再作成できます。

明確にするために:$ curl -XDELETE 'http://localhost:9200/Twitter/Tweet'

注:これはするマッピングを削除する!しかし、前述したように、新しい文書を作成することで簡単に再マッピングできます。

4
Emmy D

In Kibanaコンソール:

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

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": {} }}'
4
mindas

これにカップルセントを追加するだけです。

上に挙げた "delete_by_query" は、elasticsearch 2.xではまだプラグインとして利用可能です。

最新の今後のバージョン5.xでは、 "query by apiによる削除" に置き換えられます。

2
Walaitki

Elasticsearch 2.3のオプション

    action.destructive_requires_name: true

elasticsearch.ymlで旅行をする

    curl -XDELETE http://localhost:9200/Twitter/Tweet
0
JJANSSEN

日付に合わせて文書を削除したい場合あなたはキバナコンソールを使うことができます(v.6.1.2)

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