প্রকার মোছা ছাড়াই সূচি / প্রকার থেকে সমস্ত নথি মুছুন


155

আমি জানি যে কেউ মুছে ফেলা বিকিউয়েরীর মাধ্যমে একটি নির্দিষ্ট ধরণের সমস্ত নথি মুছতে পারে।

উদাহরণ:

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

তবে আমার কোনও শর্ত নেই এবং কেবল কোনও শব্দই থাকুক না কেন কেবল সেই ধরণের সমস্ত নথি মুছতে চান। এটি অর্জনের জন্য সেরা অনুশীলন কী? খালি মেয়াদ কাজ করে না।

ডিলিটবাইকিউয়েরিতে লিঙ্ক

উত্তর:


175

আমি বিশ্বাস করি আপনি যদি মুছে ফেলা প্রশ্নের সাথে মিল করেন তবে আপনার যা যা করা উচিত তা করা উচিত, এরকম কিছু (আপনার উদাহরণ ব্যবহার করে):

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

অথবা আপনি কেবল প্রকারটি মুছতে পারেন:

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

9
আপনার যদি কাস্টম ম্যাপিং থাকে; মনে রাখবেন যে দ্বিতীয় বিকল্পটি প্রকার এবং এর ম্যাপিংগুলি মুছবে। সুতরাং মুছে ফেলার পরে সূচীকরণের পুনরায় তৈরি করতে ভুলবেন না। নাহলে আপনি গন্ডগোল করবেন।
ডানাবিশিষ্ট আব্রাহাম

24
এফটিআর: ইলাস্টিকসার্ক ২.০ তে ক্যোরি এপিআই দ্বারা মুছুন মুছে ফেলা হয়েছে এবং এখন একটি প্লাগইনে রয়েছে
dtk

2
এইভাবে রেকর্ডগুলি মুছে ফেলার জন্য এটি প্রস্তাবিত নয় s ডক্স থেকে এখানে বিবৃতি: "এটি সমস্যাযুক্ত যেহেতু এটি নিঃশব্দে একটি রিফ্রেশকে বাধ্য করে যা সমকালীন সূচীকরণের সময় আউট মেমরিরির দ্রুত ঘটায়" elastic.co/guide/en/elasticsearch/references/1.7/ …
usef_ksa

3
FTR: QUERY প্লাগইন দ্বারা ডিলিট হবে ইএস কোর ফিরে সংস্করণ 5. হিসাবে
Val,

11
যদি আপনি "ইউরির জন্য কোনও হ্যান্ডলার পাওয়া যায় নি ..." ত্রুটিটি পেয়ে থাকেন তবে কার্ল -XPOST 'লোকালহোস্ট ব্যবহার করুন: 9200 / টুইটার / টুইট / _ডিলিট_বি_কিউ? বিবাদগুলি = এগিয়ে যান এবং সুন্দর' -d 'query "ক্যোয়ারী": match "ম্যাচ_ল": {}} } '
ইকবাল

70

মুছুন-কে-ক্যুয়েরি প্লাগইনটি একটি নতুন মুছুন বাই কোয়েরি এপিআই বাস্তবায়নের পক্ষে সরানো হয়েছে। এখানে পড়ুন

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

1
5.4 এ আমার জন্য কাজ করেছেন
jlunavtgrad

2
ES 6.1.1 এ আমার জন্য কাজ করেছেন
সেবাস্তিয়ান

7
ES 6+ এর জন্য -H 'Content-Type: application/json'
আপনারও

57

ইলাস্টিকসন্ধান 5.x থেকে, ডিফল্টরূপে মুছুন_বাই_কুইরি এপিআই রয়েছে

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

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

এই চমৎকার, কারণ এটা (অন্যান্য উত্তরের কিছু কারণে "routing_missing_exception" করার যে ক্ষেত্রে ব্যর্থ) শিশু নোড জন্য কাজ করে
dnault

16

জন পেট্রোনেসের উত্তরে টর্স্টেন এঞ্জেলব্র্যাচের মন্তব্যটি প্রসারিত:

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

(আমি জন এর উত্তর সম্পাদনা করতে চাইনি, যেহেতু এটি উত্সাহ পেয়েছে এবং উত্তর হিসাবে সেট করা হয়েছে, এবং আমি সম্ভবত একটি ত্রুটি চালু করেছি)


1
@ ক্রিস্টোফেরউসি অতিরিক্ত প্লাগইন ছাড়াই নেই, জন
পেট্রোন

16

আপনি নিম্নলিখিত প্রশ্নের সাথে দস্তাবেজগুলি মুছতে পারেন:

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

আমি এই প্রশ্নটি কিবানা এবং ইলাস্টিক 5.5.2 তে পরীক্ষা করেছি


13

ইলাস্টিকসার্চ ২.x মুছা থেকে আরম্ভ করার অনুমতি দেওয়া হয় না, যেহেতু সূচিগুলিতে সূত্রের দস্তাবেজগুলি রয়ে গেছে যা সূচককে দুর্নীতির কারণ করে।


1
তাহলে সমাধান কি ?
ক্রিস্টোফ রাউসি

1
আমি সূচকের জন্য উলের উপর ভিত্তি করে একটি সমাধান ব্যবহার করি। মূল ধারণাটি হ'ল প্রতিবারের মতো নতুন সূচী তৈরি করা news1, news2 and so onএবং বর্তমান সক্রিয় সূচকের জন্য একটি উপন্যাস সেটআপ করা news। অবশ্যই সূচকের নামটি উদাহরণ হিসাবেই রয়েছে। এখানে আপনি [সূচক ওরফে] ( elastic.co/guide/en/elasticsearch/references/current/… ) এবং একটি নিবন্ধ যা একটি কেস স্টাডি ব্যাখ্যা করে তার একটি সম্পূর্ণ উদাহরণ খুঁজে পেতে পারেন ।
ফ্যাবিও ফুমারোলা

10

ইলাস্টিক অনুসন্ধান আরএসটি অনুরোধগুলির জন্য কঠোর সামগ্রী-প্রকারের চেক করার কারণে উপরের উত্তরগুলি 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": {} }}'

1
অফিশিয়াল ডক্স অনুসারে আমাকে ইউআরএল এর _ ডক অংশটি সরিয়ে ফেলতে হয়েছিল।
মার্ক শোফার

6

ইন Kibana কনসোল:

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

6

আপনার কাছে এই বিকল্পগুলি রয়েছে:

1) একটি সম্পূর্ণ সূচক মুছুন:

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

উদাহরণ:

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

আরও তথ্যের জন্য আপনি এখানে জানতে পারেন - https://www.elastic.co/guide/en/elasticsearch/references/current/indices-delete-index.html

2) যারা মিলছে তাদের প্রশ্নের মাধ্যমে মুছুন :

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

* এখানে মেন্টোর্জ একটি সূচকের নাম এবং ব্যবহারকারীরা এক প্রকার


5

ES2 + এর জন্য নোট

ES 1.5.3 দিয়ে শুরু করে মুছুন-মোছা-এ-এ-এ-পি-পি-পি এপিআই হ্রাস করা হয়, এবং ইএস 2.0 থেকে সম্পূর্ণ মুছে ফেলা হয়

এপিআই এর পরিবর্তে, মুছে ফেলা ক্যোয়ারী এখন একটি প্লাগইন

মুছে ফেলা ক্যোয়ারী প্লাগইন ব্যবহার করার জন্য আপনাকে অবশ্যই ক্লাস্টারের সমস্ত নোডে প্লাগইন ইনস্টল করতে হবে:

sudo bin/plugin install delete-by-query

সমস্ত নোড ইনস্টলেশন পরে পুনরায় চালু করা আবশ্যক।


প্লাগইনটির ব্যবহার পুরানো এপিআইয়ের মতো। আপনার ক্যোয়ারীগুলিতে আপনাকে কোনও পরিবর্তন করার দরকার নেই - এই প্লাগইনটি কেবল তাদের কাজ করবে।


* কেন এআইপিআই সরানো হয়েছে সম্পর্কিত সম্পূর্ণ তথ্যের জন্য আপনি এখানে আরও পড়তে পারেন ।


আমার অভিজ্ঞতা থেকে, ডিলিটবাইকিউয়ারি প্লাগইন প্রচুর পরিমাণে দস্তাবেজগুলি খুব খারাপভাবে সম্পাদন করে। ES 2.3.2 এর সাথে পরীক্ষিত।
ইবাই

1
@ বাই, আমি ইএসএস ২.২.০ এর সাথে এটি একটি সূচীতে ব্যবহার করেছি কয়েক মিলিয়ন ডকুমেন্ট রয়েছে এবং এটি বেশি সময় নেয় নি (প্রায় একই সময়ে কোয়েরি এপিআই দ্বারা মূল মোছার সাথে যা 1.7 এ ছিল)। যাইহোক - আমার ধারণা, এখানে আর কোনও পছন্দ নেই, কারণ এপিআই আর বৈধ নয়।
ডেকেল

4

(স্বীকৃতি জানাতে যথেষ্ট উচ্চ নয়) জন পেট্রনের উত্তরের দ্বিতীয় অংশটি কাজ করে - কোনও প্রশ্নের প্রয়োজন নেই। এটি প্রকারটি এবং সেই ধরণের সমস্ত দস্তাবেজ মুছবে, তবে আপনি যখনই এই জাতীয় কোনও নথিকে সূচী করেন তখনই এটি পুনরায় তৈরি করা যায়।

শুধু নির্মল: $ curl -XDELETE 'http://localhost:9200/twitter/tweet'

দ্রষ্টব্য: এটি ম্যাপিংটি মুছতে পারে ! তবে পূর্বে উল্লিখিত হিসাবে এটি একটি নতুন দস্তাবেজ তৈরি করে সহজেই পুনরায় ম্যাপ করা যায়।


2
কিন্তু আপনি সব ম্যাপিং কনফিগারেশন কি আপনার আছে মুছতে, এটিকে করা উচিত নয়, আপনি কোনো ম্যাপিং জন্য নির্দিষ্ট কনফিগারেশন আছে কারণ গতিশীল ম্যাপিং শুধুমাত্র স্ট্রিং, দীর্ঘ, ইত্যাদি ... মত মূলসূত্র ক্ষেত্র তৈরি
কার্লোস রদ্রিগেজ

1
@ কার্লোস রডরিগেজ তবে আপনার যে কোনও অভিনব ম্যাপিং রয়েছে অবশ্যই সোর্স নিয়ন্ত্রণে থাকা উচিত এবং মুছে ফেলা একই স্ক্রিপ্টের অংশ হিসাবে স্বয়ংক্রিয়ভাবে পুনরায় প্রয়োগ করা খুব সহজ।
জোনাথন হার্টলি

এই উত্তরটি সরাসরি প্রশ্নের দ্বন্দ্ব করে: "সমস্ত নথি মুছুন ... মোছার ধরণের ব্যতীত"। আপনার প্রকল্পের ভিত্তিতে ম্যাপিং পুনরায় তৈরি করা কতটা সহজ তা অনুমান করবেন না। অন্যান্য প্রকল্পের ম্যাপিংয়ের সংস্করণ / মাইগ্রেশন / ইত্যাদি সম্পর্কিত জটিল পদ্ধতি থাকতে পারে।
VeganHunter

3

আমি ইলাস্টিকসার্চ 7.5 ব্যবহার করছি এবং যখন আমি ব্যবহার করি

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

যা ত্রুটির নীচে ফেলে দেবে।

{
  "error" : "Content-Type header [application/x-www-form-urlencoded] is not supported",
  "status" : 406
}

-H 'Content-Type: application/json'এটি কাজ করতে অনুরোধে আমাকে অতিরিক্ত শিরোনাম যুক্ত করতে হবে।

curl -XPOST 'localhost:9200/materials/_delete_by_query?conflicts=proceed&pretty'  -H 'Content-Type: application/json' -d'
{
    "query": {
        "match_all": {}
    }
}'
{
  "took" : 465,
  "timed_out" : false,
  "total" : 2275,
  "deleted" : 2275,
  "batches" : 3,
  "version_conflicts" : 0,
  "noops" : 0,
  "retries" : {
    "bulk" : 0,
    "search" : 0
  },
  "throttled_millis" : 0,
  "requests_per_second" : -1.0,
  "throttled_until_millis" : 0,
  "failures" : [ ]
}

এটি 6.7.2 এ আমার জন্য কাজ করে।
rooch84

2

এটিতে বেশ কয়েকটি সেন্ট যোগ করতে।

"Delete_by_query" উপরের উল্লিখিত এখনও elasticsearch 2.x. মধ্যে একটি প্লাগইন হিসাবে পাওয়া যায়

যদিও সর্বশেষতম আসন্ন সংস্করণ 5.x এ এটি "ক্যুরি এপিআই দ্বারা মুছুন" দ্বারা প্রতিস্থাপন করা হবে


0

ইলাস্টিকসার্ক ২.৩ বিকল্পটি

    action.destructive_requires_name: true

ইলাস্টিকসर्च.আইএমএলে ট্রিপটি করুন

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

-1

আপনি যদি একটি তারিখ অনুসারে নথি মুছতে চান। আপনি কিবানা কনসোল ব্যবহার করতে পারেন (v.6.1.2)

POST index_name/_delete_by_query
{
      "query" : {
              "range" : {
                 "sendDate" : {
                     "lte" : "2018-03-06"
                              }
                        }
                  }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.