2015-03-30 9 views
16

Ho cercato di cercare sul mio documento che contiene un campo nidificato. Ho creato la mappatura nidificato in questo modo:Elasticsearch: l'oggetto nidificato sotto il percorso non è di tipo annidato

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

La mia ricerca si presenta così:

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"}}]}}}]}}}}' 

Eppure io sto ricevendo questo messaggio di errore:

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

EDIT

Sto ancora ricevendo questo errore. Sto facendo questo tramite Java quindi questo è il documento che sto cercando di creare:

{ 
    "_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" 
     } 
    ] 
    } 
} 

creazione dell'indice in questo modo:

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

Penso che sto forse l'indicizzazione del documento in modo non corretto.

risposta

16

TLDR: Mettere "type": "nested", nel vostro tipo nidificato.

Dire che abbiamo un tipo normale, e un altro tipo nidificato in esso:

{ 
    "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" 
       } 
      } 
     } 
     } 
    } 
} 

è richiesta la linea di "type": "nested", per le query nidificate al lavoro che hanno "path": assegnato a nested_type, in questo modo:

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

La riga "type": "nested", sembra essere richiesta solo nelle nuove versioni di Elasticsearch (dalla 1.1.1?).

1

Errore di sintassi nella query DSL. chiusura non corretto per bloccare deve query->bool->must

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

      }// Should be ] 
     } 
    } 
} 

interrogazione versione corretta è:

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

Ho apportato una modifica al mio post originale poiché sto ancora ricevendo l'errore. –

Problemi correlati