запрос elastic exists для вложенных документов

у меня есть вложенные документы, как:

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

по этому https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-exists-query.htmlвыше должны соответствовать:

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

}

а не должно,

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

но, к сожалению, не совпадают. есть идеи?

3 ответов


пример, упомянутый в блоге Elasticsearch, относится к строкам и массивам строковых типов, а не к вложенным типам.

следующий запрос должен работать для вас:

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

кроме того, вы можете обратиться к этот вопрос для получения дополнительной информации, которая обсуждает этот шаблон использования.


со следующим отображением индекса:

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

мне нужно было использовать этот запрос:

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

Elasticsearch версия 5.4.3


это работает для меня

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