इंडेक्स / टाइप से सभी डॉक्यूमेंट्स को डिलीट किए बिना टाइप हटाएं


155

मुझे पता है कि कोई भी एक निश्चित प्रकार से सभी दस्तावेजों को deleteByQuery के माध्यम से हटा सकता है।

उदाहरण:

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

लेकिन मेरे पास कोई पद नहीं है और मैं उस प्रकार से सभी दस्तावेजों को हटाना चाहता हूं, चाहे कोई भी शब्द हो। इसे प्राप्त करने के लिए सबसे अच्छा अभ्यास क्या है? खाली पद काम नहीं करता है।

DeleteByQuery से लिंक करें

जवाबों:


175

मेरा मानना ​​है कि यदि आप डिलीट बाय क्वेरी को एक मैच के साथ जोड़ते हैं, तो उसे वही करना चाहिए जो आप देख रहे हैं, कुछ इस तरह से (अपने उदाहरण का उपयोग करके):

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

या आप केवल प्रकार हटा सकते हैं:

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

9
यदि आप कस्टम मैपिंग कर रहे हैं; ध्यान दें कि दूसरा विकल्प प्रकार और उसके मैपिंग को हटा देगा। इसलिए डिलीट करने के बाद इंडेक्स टाइप को रिमैप करना न भूलें। वरना गड़बड़ हो जाएगी।
फिन अब्राहम

24
Ftr: Elasticsearch 2.0 में क्वेरी API द्वारा डिलीट को कोर से हटा दिया गया है और अब एक प्लगइन में रहता है
dtk

2
डॉक्स से इस तरह के रिकॉर्ड को हटाने की सिफारिश नहीं की गई है: "यह समस्याग्रस्त है क्योंकि यह चुपचाप एक ताज़गी देता है जो समवर्ती अनुक्रमण के दौरान आउटऑफमेमोइर को जल्दी से पैदा कर सकता है" लोचदार.co/guide/en-elasticsearch/reference/1.7/ …
usef_ksa

3
Ftr: क्वेरी प्लगइन द्वारा डिलीट 5 संस्करण के रूप में ES कोर में वापस आ जाएगा ।
Val

11
यदि आपको "कोई हैंडलर उरई के लिए नहीं मिला ..." त्रुटि, कर्ल -XPOST 'लोकलहोस्ट का उपयोग करें: 9200 / ट्विटर / ट्वीट / _delete_by_query? संघर्ष = आगे बढ़ें और सुंदर' -d '{"क्वेरी": {}}} } '
इकबाल

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'
omry VOLK

57

ElasticSearch 5.x से, delete_by_query API डिफ़ॉल्ट रूप से है

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

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

यह अच्छा है क्योंकि यह चाइल्ड नोड्स के लिए काम करता है (कुछ अन्य उत्तर "रूटिंग_मिसिंग_सेक्स" के कारण उस स्थिति में विफल हो जाते हैं)
dnault

16

जॉन पेट्रोन्स के जवाब में टॉर्स्टन एन्गेलब्रैच की टिप्पणी का विस्तार:

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

(मैं जॉन के उत्तर को संपादित नहीं करना चाहता था, क्योंकि यह उठ गया है और उत्तर के रूप में सेट है, और मैंने एक त्रुटि पेश की है)


1
@ChristopheRoussy बिना अतिरिक्त प्लगइन के, जॉन पेट्रोन के जवाब पर टिप्पणी देखें
rsilva4

16

आप निम्नलिखित क्वेरी से प्रकार से दस्तावेज़ हटा सकते हैं:

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

मैंने किबाना और इलास्टिक 5.5.2 में इस क्वेरी का परीक्षण किया


13

Elasticsearch से शुरू करना 2.x हटाना अब अनुमति नहीं है, क्योंकि दस्तावेज़ सूचकांक में रहते हैं जिससे सूचकांक भ्रष्टाचार होता है।


1
तो समाधान क्या है ?
क्रिस्टोफ रूसो

1
मैं सूचकांक के लिए उपनाम पर आधारित एक समाधान का उपयोग करता हूं। मुख्य विचार हर बार की तरह नए सूचकांक बनाने news1, news2 and so onऔर वर्तमान सक्रिय सूचकांक के लिए एक उपनाम को newsपथ पर सेट करना है। बेशक सूचकांक का नाम केवल उदाहरण के रूप में है। यहां आप [अनुक्रमणिका उपनाम] ( इलास्टिक.co/guide/en/elasticsearch/reference/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
आधिकारिक डॉक्स के अनुसार मुझे URL के _doc भाग को निकालना था।
मार्क शेफर

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/reference/current/indices-delete-index.html

2) उस मैच के लिए क्वेरी द्वारा हटाएं :

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

* यहाँ मेंटोरेज एक इंडेक्स नाम है और उपयोगकर्ता एक प्रकार है


5

ES2 + के लिए ध्यान दें

ES 1.5.3 के साथ शुरू करने वाला डिलीट-बाय-क्वेरी API को हटा दिया जाता है, और ES 2.0 से पूरी तरह से हटा दिया जाता है

एपीआई के बजाय, डिलीट बाय क्वेरी अब एक प्लगइन है

डिलीट बाय क्वेरी प्लगइन का उपयोग करने के लिए आपको क्लस्टर के सभी नोड्स पर प्लगइन स्थापित करना होगा:

sudo bin/plugin install delete-by-query

स्थापना के बाद सभी नोड्स को पुनरारंभ करना होगा।


प्लगइन का उपयोग पुराने एपीआई के समान है। आपको अपने प्रश्नों में कुछ भी बदलने की आवश्यकता नहीं है - यह प्लगइन बस उन्हें काम करेगा।


* क्यों एपीआई हटा दिया गया था के बारे में पूरी जानकारी के लिए आप यहाँ और पढ़ सकते हैं ।


मेरे अनुभव से, DeleteByQuery प्लगइन बड़ी मात्रा में दस्तावेजों के साथ बहुत खराब प्रदर्शन करता है। ES 2.3.2 के साथ परीक्षण किया गया।
aiबाई

1
@ibai, मैंने इसका इस्तेमाल ES 2.2.0 के साथ एक इंडेक्स में कई मिलियन डॉक्यूमेंट्स के साथ किया था और इसमें लंबे समय नहीं लगे थे (क्वेरी एपीआई द्वारा मूल डिलीट के साथ लगभग यही समय 1.7 में था)। वैसे भी - मुझे लगता है कि यहाँ कोई विकल्प नहीं है, क्योंकि एपीआई अब मान्य नहीं है।
डेकेल

4

(प्रतिष्ठा टिप्पणी करने के लिए पर्याप्त उच्च नहीं है) जॉन पेट्रोन के जवाब का दूसरा हिस्सा काम करता है - कोई क्वेरी की आवश्यकता नहीं है। यह उस प्रकार में निहित प्रकार और सभी दस्तावेज़ों को हटा देगा, लेकिन यह केवल तब बनाया जा सकता है जब भी आप किसी नए दस्तावेज़ को उस प्रकार से अनुक्रमित करते हैं।

केवल स्पष्ट करने हेतु: $ curl -XDELETE 'http://localhost:9200/twitter/tweet'

नोट: यह मैपिंग को डिलीट करता है ! लेकिन जैसा कि पहले उल्लेख किया गया है, एक नया दस्तावेज़ बनाकर इसे आसानी से फिर से मैप किया जा सकता है।


2
लेकिन आप सभी मैपिंग कॉन्फ़िगरेशन को हटा सकते हैं जो आपके पास है, यह अनुशंसित नहीं है जब आपके पास किसी भी मैपिंग के लिए विशिष्ट कॉन्फ़िगरेशन है, क्योंकि डायनेमिक मैपिंग केवल मूल फ़ील्ड्स जैसे स्ट्रिंग, लॉन्ग आदि बनाते हैं ...
कार्लोस रॉड्रिग्ज़

1
@CarlosRodriguez लेकिन किसी भी फैंसी मैपिंग को आपके पास निश्चित रूप से स्रोत नियंत्रण में होना चाहिए, और हटाने के लिए उसी स्क्रिप्ट के भाग के रूप में स्वचालित रूप से फिर से लागू करना बहुत आसान है।
जोनाथन हार्टले

यह जवाब सीधे सवाल का विरोध करता है: "सभी दस्तावेजों को हटाएं ... प्रकार को हटाने के बिना"। कृपया यह अनुमान न लगाएं कि आपकी परियोजना के आधार पर मानचित्रण को फिर से बनाना कितना आसान है। अन्य परियोजनाओं में मैपिंग वर्जन / माइग्रेशन / आदि के लिए अधिक जटिल प्रक्रियाएं हो सकती हैं।
वघनहंटर

3

मैं I'm.० का उपयोग कर रहा हूँ और जब मैं उपयोग करता हूँ

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 पर काम करता है।
रोचॉव

2

बस इसमें जोड़े गए जोड़े को जोड़ना है।

"Delete_by_query" शीर्ष पर उल्लेख अभी भी elasticsearch 2. x में एक प्लगइन के रूप में उपलब्ध है

यद्यपि नवीनतम आगामी संस्करण 5.x में इसे "डिलीट बाय क्वेरी एपी" द्वारा बदल दिया जाएगा।


0

एलेस्टिक्स खोज 2.3 विकल्प

    action.destructive_requires_name: true

elasticsearch.yml में यात्रा करें

    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"
                              }
                        }
                  }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.