Elasticsearch - Как фильтровать данные с помощью вложенных полей - PullRequest
0 голосов
/ 27 июня 2018

Ниже приведено несколько документов с тегами в виде вложенного поля. Можно ли отфильтровать результаты, чтобы получить документы, которые имеют tags.id = 21 и tags.id = 22?

{
  "title": "Nokia",
  "tags": [
    {
      "id": 21
    },
    {
      "id": 22
    }
  ]  
}

{
  "title": "HTC",
  "tags": [
    {
      "id": 21
    },
    {
      "id": 23
    }
  ]  
}

{
  "title": "Samsung",
  "tags": [
    {
      "id": 21
    },
    {
      "id": 22
    }
  ]  
}

В этом случае результат должен вернуть документы с названием Nokia и Samsung

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Ниже приведен запрос для поиска в ситуации, упомянутой в вопросе

{
    "query": {
        "bool": {
            "filter": [
                {
                    "nested":{
                        "path":"tags",
                        "query":{
                            "bool":{
                                "filter":[
                                    {"term": {"tags.id": 21}}
                                ]
                            }
                        }
                    }
                },
                {
                    "nested":{
                        "path":"tags",
                        "query":{
                            "bool":{
                                "filter":[
                                    {"term": {"tags.id": 22}}
                                ]
                            }
                        }
                    }
                }

            ]
        }
    }
}

Ошибка, которую я делал, заключалась в размещении двух блоков совпадения под одним и тем же блоком фильтра.

"filter":[
    {"term": {"tags.id": 21}},
    {"term": {"tags.id": 22}}
]
0 голосов
/ 27 июня 2018

Вы можете использовать логический запрос:

GET my_index/_search
{
    "query": {
        "bool": {
            "filter": [
                {"match": {"tags.id": 21}},
                {"match": {"tags.id": 22}}
            ]
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...