2017-01-05 9 views
5

mam zagnieżdżonej dokumentów jak:elastyczny występuje zapytanie dla dokumentów zagnieżdżonych

"someField": "hello", 
"users": [ 
    { 
    "name": "John", 
     "surname": "Doe", 
     "age": 2 
    } 
] 

według tego https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-exists-query.html powyższy powinna odpowiadać:

GET /_search 
{ 
    "query": { 
    "exists" : { "field" : "users" } 
    } 

}

natomiast następujące nie powinny ,

"someField": "hello", 
"users": [] 

, ale niestety oba nie pasują. jakieś pomysły?

Odpowiedz

7

Przykład wspomniany na blogu Elasticsearch odnosi się do ciągów i tablic typów łańcuchów, a nie do typów zagnieżdżonych.

Następująca kwerenda powinny pracować dla Ciebie:

{ 
    "query": { 
     "nested": { 
      "path": "users", 
      "query": { 
       "bool": { 
        "must": [ 
         { 
          "exists": { 
           "field": "users" 
          } 
         } 
        ] 
       } 
      } 
     } 
    } 
} 

Ponadto, można odwołać się do this issue uzyskać więcej informacji, który omawia użycie tego wzorca.

+0

czy nie powinno to być "" pole ":" użytkownicy "? –

+0

tak, przepraszam za literówkę – user3775217

1

z następującymi odwzorowania indeksu:

{ 
    "index_name": { 
     "mappings": { 
     "object_name": { 
      "dynamic": "strict", 
      "properties": { 
       "nested_field_name": { 
        "type": "nested", 
        "properties": { 
        "some_property": { 
         "type": "keyword" 
        } 
        } 
       } 
      } 
     } 
     } 
    } 
} 

Musiałem użyć tej kwerendy:

GET /index_name/_search 
{ 
    "query": { 
     "nested": { 
     "path": "nested_field_name", 
     "query": { 
      "bool": { 
       "must": [ 
        { 
        "exists": { 
         "field": "nested_field_name.some_property" 
        } 
        } 
       ] 
      } 
     } 
     } 
    } 
} 

wersję Elasticsearch 5.4.3

1

Działa to dla mnie

GET /type/_search?pretty=true 
{ 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "nested": { 
      "path": "outcome", 
      "query": { 
       "exists": { 
       "field": "outcome.outcomeName" 
       } 
      } 
      } 
     } 
     ] 
    } 
    } 
} 
+0

To jest jedyna odpowiedź, która zadziałała dla mnie. –