2012-09-13 12 views
6

मेरे पास निम्न प्रश्न है कि मैं ElasticSearch अनुक्रमणिका से डेटा हटाने के लिए उपयोग करने का प्रयास कर रहा हूं।लोचदार खोज क्वेरी हटाएं - शब्द और सीमा के साथ फ़िल्टर करें

{ 
    "filter": { 
     "and": [ 
      { 
       "range": { 
        "Time": { 
         "from": "20120101T000000", 
         "to": "20120331T000000" 
        } 
       } 
      }, 
      { 
       "term": { 
        "Source": 1 
       } 
      } 
     ] 
    } 
} 

मैंने इस क्वेरी के आधार पर दस्तावेज़ों को हटाने का प्रयास किया है। जब मैं इंडेक्स के खिलाफ इसे चलाता हूं तो यह क्वेरी परिणाम ठीक करती है। लेकिन जब मैं इंडेक्स के खिलाफ डिलीट कमांड चलाने की कोशिश करता हूं, तो कुछ भी नहीं होता है।

मुझे यकीन नहीं है कि क्या मैं गलत क्वेरी का निर्माण कर रहा हूं या और क्या।

उत्तर

10

आप केवल एक फ़िल्टर का उपयोग कर रहे हैं जबकि delete by query API शायद एक प्रश्न की आवश्यकता है। आप एक filtered query इस तरह का उपयोग कर एक सवाल के अपने फिल्टर परिवर्तित कर सकते हैं:

{ 
    "filtered" : { 
     "query" : { 
      "match_all" : {} 
     }, 
     "filter": { 
      "and": [ 
       { 
        "range": { 
         "Time": { 
          "from": "20120101T000000", 
          "to": "20120331T000000" 
         } 
        } 
       }, 
       { 
        "term": { 
         "Source": 1 
        } 
       } 
      ] 
     } 
    } 
} 

नहीं तो आप इतना है कि यदि आपको फ़िल्टर क्वेरी और आवश्यकता नहीं है एक bool query दो के साथ करना चाहिए खंड का उपयोग कर, एक सवाल के अपने फिल्टर परिवर्तित कर सकते हैं। वैसे भी, मुझे लगता है कि फिल्टर दृष्टिकोण बेहतर है क्योंकि फिल्टर तेज है।

+1

ध्यान दें कि आपको वास्तव में फ़िल्टर किए गए 'क्वेरी' घटक की आवश्यकता नहीं है: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-filtered-query.html#_filtering_without_a_query – tmandry

+0

अच्छा बिंदु @tmandry – javanna

संबंधित मुद्दे