2013-12-16 10 views
9

पर एक से अधिक श्रेणियों के साथ elasticsearch में निम्नलिखित range_query एक परिणाम के रूप में उम्मीद रिटर्न:क्वेरी कई तिथियों

{"query": { 
    "bool":{ 
     "must": [ 
     { 
      "and": [ 
      { 
       "range": { 
       "created_at": { 
        "gte": "2013-12-09" 
       } 
       } 
      }, 
      { 
       "range": { 
       "happens_on": { 
        "lte": "2013-12-16" 
       } 
       } 
      }, 
      { 
       "range": { 
       "created_at": { 
        "lte": "2013-12-14" 
       } 
       } 
      } 
      ] 
     } 
     ] 
    } 
    } 
} 

क्या है:

{"query": { 
    "bool": { 
     "must": [ 
     { 
      "range": { 
      "created_at": { 
       "gte": "2013-12-09" 
      } 
      } 
     } 
     ] 
    } 
    } 
} 

लेकिन और-इंग एक साथ कई रेंज प्रश्नों, कुछ भी नहीं देता है एकाधिक फ़ील्ड पर एकाधिक range_queries का उपयोग करने का सही तरीका?

संपादित करें: आह, ठीक है, तो यह है जहां मैं श्रेणी_फिल्टर के विपरीत श्रेणी_फिल्टर का उपयोग करता हूं? यह वादा किया गया, इसलिए मैंने केवल एक सिंगल रेंज फ़िल्टर का उपयोग करके अपनी क्वेरी को फिर से लिखा। यहां सब कुछ पोस्ट कर रहा है, अगर मैं किसी और जगह क्वेरी को गड़बड़ कर रहा हूं। मैं किसी GET प्रदर्शन कर रहा हूँ, और स्रोत कुंजी के अंदर सब कुछ वास्तव में JSON है, लेकिन मैं पठनीयता के लिए हाइफ़न भाग निकले हटाया:

{ 
    "source": { 
    "filtered": { 
     "filter": { 
     "and": [ 
      { 
      "term": { 
       "restricted": false 
      } 
      }, 
      { 
      "not": { 
       "term": { 
       "deleted": true 
       } 
      } 
      }, 
      { 
      "range": { 
       "happens_on": { 
       "lte": "2013-12-16" 
       } 
      } 
      } 
     ] 
     }, 
     "query": { 
     "bool": { 
      "must": [ 
      ] 
     } 
     } 
    }, 
    "from": 0, 
    "size": 10 
    } 
} 

अफसोस, मेरी समस्या अभी भी वही है: मैं कोई हिट नहीं मिल रहा है ।

EDIT2: तो, निजल जैसे सुझाए गए खंड के अंदर श्रेणियों की गली नीचे जा रहा है। यह मुझे इस तरह एक बहु-श्रेणी की क्वेरी देता है:

{ 
    "source": { 
    "filter": { 
     "and": [ 
     { 
      "term": { 
      "restricted": false 
      } 
     }, 
     { 
      "not": { 
      "term": { 
       "deleted": true 
      } 
      } 
     } 
     ] 
    }, 
    "from": 0, 
    "query": { 
     "bool": { 
     "must": [ 
      { 
      "range": { 
       "happens_on": { 
       "gte": "2013-12-06" 
       } 
      } 
      }, 
      { 
      "range": { 
       "created_at": { 
       "gte": "2013-12-15" 
       } 
      } 
      }, 
      { 
      "range": { 
       "happens_on": { 
       "lte": "2013-12-17" 
       } 
      } 
      }, 
      { 
      "range": { 
       "created_at": { 
       "lte": "2013-12-17" 
       } 
      } 
      } 
     ] 
     } 
    }, 
    "size": 10 
    } 
} 

अभी भी कोई परिणाम नहीं लौटाया गया है। क्या मैं यहां कोई स्पष्ट गलती कर रहा हूं?

उत्तर

12

आपके bool प्रश्नों के तहत must खंड and में इसे लपेटने की कोई आवश्यकता नहीं है। and क्वेरी नहीं है, शायद आप and filter के बारे में सोच रहे थे?

Example runnable play सुविधा के लिए के रूप में कर्ल कमांड:

#!/bin/bash 

export ELASTICSEARCH_ENDPOINT="http://localhost:9200" 

# Create indexes 

curl -XPUT "$ELASTICSEARCH_ENDPOINT/play" -d '{ 
    "settings": {}, 
    "mappings": { 
     "type": { 
      "properties": { 
       "created_at": { 
        "type": "date", 
        "format": "dateOptionalTime" 
       }, 
       "name": { 
        "type": "string" 
       }, 
       "happens_on": { 
        "type": "date", 
        "format": "dateOptionalTime" 
       } 
      } 
     } 
    } 
}' 


# Index documents 
curl -XPOST "$ELASTICSEARCH_ENDPOINT/_bulk?refresh=true" -d ' 
{"index":{"_index":"play","_type":"type"}} 
{"name":"foo","created_at":"2013-12-09T00:00:00.000Z","happens_on":"2013-12-16T00:00:00.000Z"} 
{"index":{"_index":"play","_type":"type"}} 
{"name":"bar","created_at":"2013-12-08T00:00:00.000Z","happens_on":"2013-12-16T00:00:00.000Z"} 
{"index":{"_index":"play","_type":"type"}} 
{"name":"bar","created_at":"2013-12-09T00:00:00.000Z","happens_on":"2013-12-17T00:00:00.000Z"} 
' 

# Do searches 

curl -XPOST "$ELASTICSEARCH_ENDPOINT/_search?pretty" -d ' 
{ 
    "query": { 
     "bool": { 
      "must": [ 
       { 
        "range": { 
         "created_at": { 
          "gte": "2013-12-09T00:00:00.000Z" 
         } 
        } 
       }, 
       { 
        "range": { 
         "happens_on": { 
          "lte": "2013-12-16T00:00:00.000Z" 
         } 
        } 
       } 
      ] 
     } 
    } 
} 
' 
+0

जवाब और इस पर मेरे भ्रम के लिए खेद के लिए धन्यवाद। मैं अपने खंडों को अवश्य खंड के अंदर घोंसला करने की कोशिश करूंगा। – thomax

+0

ठीक है, मैंने आपके सुझाव की कोशिश की, प्रश्न में मेरे EDIT2 देखें। अभी भी कोई परिणाम नहीं। क्या यह तिथि स्वरूपण से संबंधित हो सकता है? – thomax

+1

Riiiight। तो यह कारण निकला कि मैं नजल्स के सुझाव के लिए मेरे लिए काम नहीं कर रहा था यह था कि मेरा परीक्षण गड़बड़ हो गया था। अब परीक्षण तय और समाधान चट्टानों है। धन्यवाद! – thomax

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