2017-01-13 12 views
7

पर अपडेट करने के बाद नेस्टेड जियोपॉइंट का पता लगाने में असमर्थ हम एडब्ल्यूएस प्रबंधित एलैस्टिकसेर्च सेवा का उपयोग करते हैं और हाल ही में 1.5 से 2.3 तक अपग्रेड किए गए हैं। हम अपने प्रश्नों को बनाने के लिए पाइथन में elasticsearch-dsl पैकेज का उपयोग करते हैं और हमारे अधिकांश प्रश्नों को माइग्रेट करने में कामयाब रहे हैं, लेकिन geo_distance टूट गया है चाहे मैं कोशिश करता हूं।elasticsearch 2.3

मैपिंग:

{ 
     'company': { 
      'properties': { 
       'id': {'type': 'integer'}, 
       'company_number': {'type': 'string'}, 
       'addresses': { 
        'type': 'nested', 
        'properties': { 
         'postcode': {'type': 'string', 'index': 'not_analyzed'}, 
         'location': {'type': 'geo_point'} 
        } 
       } 
      } 
     } 
} 

अजगर elasticsearch-डीएसएल == के साथ काम करने 0.0.11

  test_location = '53.5411062377, -2.11485504709' 
      test_distance = "3miles" 
      location_filter = F("geo_distance", 
           location=test_location, 
           distance=test_distance) 
      query = query.filter("nested", 
           path="addresses", 
           filter=location_filter) 

पुस्तकालय द्वारा उत्पन्न क्वेरी कोड:

{'query': {'filtered': {'filter': {'nested': {'filter': {'geo_distance': {'distance': u'3miles', 'location': '53.5411062377, -2.11485504709'}}, 'path': 'addresses'}}, 'query': {'match_all': {}}}}} 

हम एक ब्रांड बनाया है एक ही मैपिंग के साथ एक नए 2.3 पर नई अनुक्रमणिका।

elasticsearch-डीएसएल के लिए == 2.1.0 अद्यतन करने और प्रश्नों के लिए फिल्टर परिवर्तित करने के लिए प्रयास करने के बाद:

geo_query = Q({"bool": { 
        "must": [ 
         { 
          "geo_distance": { 
           "distance": "test_distance", 
           "addresses__location": test_location, 
          } 
         }, 
        ] 
       }}) 

कि निम्न क्वेरी उत्पन्न करता है:

{'query': {'bool': {'must': [{'geo_distance': {'distance': '3 miles', u'addresses.location': {'lat': '53.5411062377', 'lon': '-2.11485504709'}}}]}}} 

हम निम्नलिखित अपवाद:

RequestError: TransportError(400, u'search_phase_execution_exception', u'failed to find geo_point field [addresses.location]') 

मैं 'स्थान', 'addresses.location', 'विज्ञापन के रूप में क्षेत्र को संदर्भित करने की कोशिश की कपड़े 'और पुराने नेस्टेड क्वेरी प्रकार का उपयोग कर। मैं यह नहीं समझ सकता कि मैपिंग 2.3 में मान्य नहीं है या यदि मैं गलत क्वेरी का निर्माण कर रहा हूं।

RequestError: TransportError(400, u'search_phase_execution_exception', u'[nested] nested object under path [addresses.location] is not of nested type') 

मुझे लगता है मैं lat_lon जोड़ने की जरूरत:

क्वेरी

Q({'nested': {'filter': { 
         'geo_distance': {'distance': u'3miles', 'location': '53.5411062377, -2.11485504709'} 
        }, 
        'path': 'addresses.location'}}) 

निम्न त्रुटि उत्पन्न करता है geodistance प्रश्नों काम करने के लिए मानचित्रण के लिए यह सच है, लेकिन उदाहरण में से कोई भी यह है ।

किसी भी मदद की बहुत सराहना की जाएगी, धन्यवाद!

+0

'' path' होना चाहिए addresses' और 'geo_distance' फिल्टर में आप' बजाय सिर्फ '" स्थान "के" addresses.location "' 'होना आवश्यक है – Val

+0

खेद है कि मैं 'प्लेसमेंट' के साथ, कोशिश की है। – marklar

+0

क्या आप नीचे दिए गए उत्तर का प्रयास कर सकते हैं? – Val

उत्तर

1

यह काम करना चाहिए:

 test_location = '53.5411062377, -2.11485504709' 
     test_distance = "3miles" 
     location_query = Q("geo_distance", 
          addresses__location=test_location, 
          distance=test_distance) 
     query = query.filter("nested", 
          path="addresses", 
          query=location_query) 
+0

जितनी जल्दी हो सके इसे आज़माएं! – marklar

+0

मुझे बताएं कि क्या यह अभी भी काम नहीं करता है, और हम इसे – Val

+0

समझ लेंगे ऐसा लगता है कि मैंने काम किया है, भले ही मैंने शपथ ली हो कि मैंने इसे पहले ही कोशिश की है! मैंने सोचा था कि इस मुद्दे की जड़ इंडेक्स को पुनर्जीवित करते समय मैपिंग सही तरीके से नहीं भेज रही थी, लेकिन अब यह काम कर रही है। मेरी समस्या पर समय बिताने के लिए बहुत बहुत धन्यवाद! – marklar