2015-03-30 12 views
16

नहीं है, मैं अपने दस्तावेज़ पर खोज करने की कोशिश कर रहा हूं जिसमें घोंसला वाला क्षेत्र है। मैं इस तरह नेस्टेड मानचित्रण बनाया:लोचदार खोज: पथ के नीचे नेस्टेड ऑब्जेक्ट नेस्टेड प्रकार

{ 
    "message": { 
    "properties": { 
     "messages": { 
     "type": "nested", 
     "properties": { 
      "message_id": { "type": "string" }, 
      "message_text": { "type": "string" }, 
      "message_nick": { "type": "string" } 
     } 
     } 
    } 
    } 
} 

मेरे खोज इस तरह दिखता है:

curl -XGET 'localhost:9200/thread_and_messages/thread/_search' \ 
    -d '{"query": {"bool": {"must": [{"match": {"thread_name": "Banana"}}, {"nested": {"path": "messages", "query": {"bool": {"must": [{"match": {"messages.message_text": "Banana"}}]}}}]}}}}' 

अभी तक मैं यह त्रुटि संदेश मिल रहा हूँ:

QueryParsingException[[thread_and_messages] [nested] nested object under path [messages] is not of nested type] 

संपादित

मुझे अभी भी यह त्रुटि मिल रही है। मैं जावा के माध्यम से यह कर रहा हूं इसलिए इस दस्तावेज़ मैं बनाने के लिए कोशिश कर रहा हूँ है:

{ 
    "_id": { 
    "path": "3", 
    "thread_id": "3", 
    "thread_name": "Banana", 
    "created": "Wed Mar 25 2015", 
    "first_nick": "AdminTech", 
    "messages": [ 
     { 
     "message_id": "9", 
     "message_text": "Banana", 
     "message_nick": "AdminTech" 
     } 
    ] 
    } 
} 

तो जैसे सूचकांक बनाना:

CreateIndexRequestBuilder indexRequest = client.admin().indices().prepareCreate(INDEX).addMapping("message", mapping); 

मुझे लगता है कि मैं संभवतः दस्तावेज़ को गलत ढंग से की अनुक्रमणिका बना रहा हूँ।

उत्तर

16

TLDR: अपने नेस्टेड प्रकार में डाल "type": "nested",

कहते हैं कि हम एक सामान्य प्रकार है, और एक और प्रकार यह में नेस्ट:

{ 
    "some_index": { 
     "mappings": { 
     "normal_type": { 
      "properties": { 
       "nested_type": { 
        "type": "nested", 
        "properties": { 
        "address": { 
         "type": "string" 
        }, 
        "country": { 
         "type": "string" 
        } 
        } 
       }, 
       "first_name": { 
        "type": "string" 
       }, 
       "last_name": { 
        "type": "string" 
       } 
      } 
     } 
     } 
    } 
} 

"type": "nested", लाइन जो "path":nested_type करने के लिए आवंटित किया है काम करने के लिए नेस्टेड प्रश्नों के लिए आवश्यक है, इस तरह:

GET /some_index/normal_type/_search 
{ 
    "query": { 
    "nested": { 
     "query": { 
     "bool": {} 
     }, 
     "path": "nested_type" 
    } 
    } 
} 

"type": "nested", लाइन केवल नए Elasticsearch संस्करणों में (1.1.1 से) की आवश्यकता होती है।

1

क्वेरी डीएसएल में सिंटेक्स त्रुटि। गलत समापन ब्लॉक चाहिए के लिए query->bool->must

{ 
    "query": { 
     "bool": { 
       "must": [ 

      }// Should be ] 
     } 
    } 
} 

सही संस्करण क्वेरी हैं:

curl -XGET 'localhost:9200/thread_and_messages/thread/_search' -d '{ 
    "query": { 
     "bool": { 
     "must": [ 
      { 
       "match": { 
        "thread_name": "Banana" 
       } 
      }, 
      { 
       "nested": { 
        "path": "message", 
        "query": { 
        "bool": { 
         "must": [ 
          { 
           "match": { 
           "messages.message_text": "Banana" 
           } 
          } 
         ] 
        } 
        } 
       } 
      } 
     ] 
     } 
    } 
}' 
+0

मैंने अपनी मूल पोस्ट में एक संपादन किया है क्योंकि मुझे अभी भी त्रुटि मिल रही है। –

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