2016-08-17 12 views
5

में एक ही क्वेरी में 'gt` और `fields` का उपयोग कैसे करें previous question में, मुझे fields पर query_string क्वेरी में पेश किया गया था और यह दस्तावेज़ के नेस्टेड फ़ील्ड को खोजने में मेरी सहायता कैसे कर सकता है।Elasticsearch

{ 
    "query": { 
    "query_string": { 
     "fields": ["*.id","id"], 
     "query": "2" 
    } 
    } 
} 

लेकिन यह केवल मिलान के लिए काम करता है, अगर मैं कुछ तुलना करना चाहता हूं तो क्या होगा? कुछ पढ़ने और परीक्षण के बाद, ऐसा लगता है कि range जैसे प्रश्न fields का समर्थन नहीं करते हैं। क्या कोई तरीका है कि मैं range क्वेरी कर सकता हूं, उदा। किसी तारीख पर, उस क्षेत्र में जिसे दस्तावेज़ पदानुक्रम में कहीं भी बिखराया जा सकता है? स्पष्ट रूप से Reply.date को पता दिए बिना

{ 
    "id" : 1, 
    "Comment" : "Comment 1", 
    "date" : "2016-08-16T15:22:36.967489", 
    "Reply" : [ { 
     "id" : 2, 
     "Comment" : "Inner comment", 
     "date" : "2016-08-16T16:22:36.967489" 
    } ] 
} 

वहाँ date क्षेत्र (जैसे date > '2016-08-16T16:00:00.000000') जो क्योंकि नेस्टेड क्षेत्र के दिए गए दस्तावेज़ से मेल खाता है, पर खोजते समय एक प्रश्न है,:

अर्थात निम्नलिखित दस्तावेज़ पर विचार? (मैं पता निम्न क्वेरी सही नहीं है) कुछ इस तरह:

{ 
    "query": { 
     "range" : { 
      "date" : { 
       "gte" : "2016-08-16T16:00:00.000000", 
      }, 
      "fields": ["date", "*.date"] 
     } 
    } 
} 

उत्तर

3

range क्वेरी ही इसका समर्थन नहीं करता, हालांकि, आप लाभ उठा सकते हैं query_string क्वेरी (फिर) और तथ्य यह है कि आप क्षेत्रों वाइल्डकार्ड कर सकते हैं और

{ 
    "query": { 
    "query_string": { 
     "query": "\*date:[2016-08-16T16:00:00.000Z TO *]" 
    } 
    } 
} 

ऊपर क्वेरी अपने दस्तावेज़ वापस आ जाएगी क्योंकि Reply.date मैचों *date

+0

तुम समझा कृपया सकते हैं/डब्ल्यू पर एक दस्तावेज़ देखें: है कि यह क्रम में प्राप्त करने के लिए आपको क्या चाहिए रेंज प्रश्नों का समर्थन करता है टोपी '\ *' कर रही है? और क्या मुझे पहले 'फ़ील्ड' का उपयोग करना चाहिए? – Mehran

+2

यह [क्वेरी स्ट्रिंग क्वेरी सिंटैक्स] में है (https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html#_field_names) दस्तावेज़ "फ़ील्ड में नाम "खंड। आपको 'फ़ील्ड्स' का उपयोग करने की आवश्यकता नहीं है, वाइल्डकार्ड इसे अनावश्यक बनाता है। '\ * दिनांक' का अर्थ है 'दिनांक' (नेस्टेड वाले समेत) के साथ समाप्त होने वाला कोई भी क्षेत्र। बैकस्लैश वहां है क्योंकि हमें वाइल्डकार्ड '*' से बचने की आवश्यकता है जो क्वेरी स्ट्रिंग सिंटैक्स में एक आरक्षित चरित्र है। – Val