запрос 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"
}
}
}
}
]
}
}
}