Elasticsearch применяет фильтр запросов к вложенному списку, отфильтровывая несопоставленные вложенные объекты - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть документ, который содержит вложенный список объектов.Я хотел бы создать запрос, чтобы вернуть документы, которые содержат определенный вложенный элемент, но также ограничить полученный список вложенных элементов теми, которые удовлетворяют условиям.

Например:

Я хочучтобы получить все документы, которые содержат вложенный элемент "user.first": "Alice" , но также ограничить результаты, возвращаемые в "users", только теми объектами, которые содержат сначала: Alice

PUT /posts?pretty

PUT posts
{
  "mappings": {
    "doc": {
      "properties": {
        "user": {
          "type": "nested" 
        }
      }
    }
  }
}

PUT posts/doc/1
{
  "group" : "fans",
  "user" : [
    {
      "first" : "John",
      "last" :  "Smith"
    },
    {
      "first" : "Alice",
      "last" :  "White"
    }
  ]
}

PUT posts/doc/2
{
  "group" : "fans",
  "user" : [
    {
      "first" : "John",
      "last" :  "Smith"
    },
    {
      "first" : "Alice",
      "last" :  "Black"
    },
    {
      "first" : "Alice",
      "last" :  "Red"
    }
  ]
}

Затем я могу использовать inner_hits, чтобы получить совпадающего пользователя, но я бы хотел получить этот список внутри _source.user вместо этого внутри inner_hits (не возвращать _source.user, который не содержит Алиса ):

GET posts/_search
{
  "query": {
    "nested": {
      "path": "user",
      "query": {
        "bool": {
          "must": [
            { "match": { "user.first": "Alice" }} 
          ]
        }
      },
       "inner_hits": { }

    }
  }
}

возвращает это:

#hit 1:
{.....
},
#hit 2:
 {
        "_index": "posts",
        "_type": "doc",
        "_id": "2",
        "_source": {
          "group": "fans",
          "user": [
                {
                  "first" : "John",
                  "last" :  "Smith"
                },
                {
                  "first" : "Alice",
                  "last" :  "Black"
                },
                {
                  "first" : "Alice",
                  "last" :  "Red"
                }
          ]
        },
        "inner_hits": {
          "user": {
            "hits": {
              "total": 2,
              "hits": [
                {
                  "_nested": {
                    "field": "user",
                    "offset": 2
                  },
                  "_source": {
                    "first": "Alice",
                    "last": "Black"
                  }
                },
                {
                  "_nested": {
                    "field": "user",
                    "offset": 1
                  },
                  "_source": {
                    "first": "Alice",
                    "last": "Red"
                  }
                }
              ]
            }
          }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...