Elasti c Поисковая агрегация вложенная - PullRequest
0 голосов
/ 26 февраля 2020

Я должен сделать агрегацию о фильмах актера по тегу

Например, я хочу увидеть все теги mov ie для Роберта Дени младшего, например: action (10) блокбастер (4) романтика (2)

Если мой пользовательский фильтр фильмов Роберта Дени младшего по тегу (действию) необходимо обновить, фильтры. Если я проверю романтику, то: action (1) blockbuster (2) romance (2)

Это мое отображение:

  "mapping": {
    "actor": {
      "properties": {
        "id": {
          "type": "keyword"
        },
        "name": {
          "type": "text"
        },
        "movies": {
          "type": "nested",
          "properties": {
            "id": {
              "type": "keyword"
            },
            "studio": {
              "type": "nested",
              "properties": {
                "id": {
                  "type": "keyword"
                },
                "label": {
                  "type": "text"
                }
              }
            },
            "tags": {
              "type": "nested",
              "properties": {
                "id": {
                  "type": "keyword"
                },
                "label": {
                  "type": "text"
                }
              }
            }
          }
        }
      }
    }
  }
}

И это мой запрос

{
  "query": {
    "bool": {
      "filter": [
        {
          "match": {
            "id": {
              "query": 587
            }
          }
        },
        {
          "bool": {
            "must": [
              {
                "nested": {
                  "path": "movies",
                  "query": {
                    "nested": {
                      "path": "movies.tags",
                      "query": {
                        "term": {
                          "movies.tags.id": {
                            "value": 5189,
                            "boost": 1
                          }
                        }
                      }
                    }
                  }
                }
              }
            ]
          }
        }
      ]
    }
  },
  "aggs": {
    "tags": {
      "nested": {
        "path": "movies.tags"
      },
      "aggs": {
        "tags": {
          "terms": {
            "field": "movies.tags.id",
            "size": 100
          }
        }
      }
    }
  }
}

Мое агрегирование игнорирует данный тег. Я могу фильтровать по тегу или нет, результаты агрегации не меняются.

Есть идеи?

1 Ответ

0 голосов
/ 02 марта 2020

Есть ли причина, по которой вы бы вложили свой запрос тега дважды? Сначала вы говорите movies, а затем movie.tags, поэтому, вероятно, вы не получаете желаемых результатов. Попробуйте это

{
    "query":{
        "bool":{
            "filter":[
                {
                    "match":{
                        "id":{
                            "query":587
                        }
                    }
                },
                {
                    "bool":{
                        "must":[
                            {
                                "nested":{
                                    "path":"movies",
                                    "query":{
                                        "term":{
                                            "movies.tags.id":{
                                                "value":5189,
                                                "boost":1
                                            }
                                        }
                                    }
                                }
                            }
                        ]
                    }
                }
            ]
        }
    },
    "aggs":{
        "tags":{
            "nested":{
                "path":"movies.tags"
            },
            "aggs":{
                "tags":{
                    "terms":{
                        "field":"movies.tags.id",
                        "size":100
                    }
                }
            }
        }
    }
}

Если это не сработает, пожалуйста, поделитесь частью ваших данных.

Также обратите внимание, что когда вы применяете ограничения запросов, ваши агрегаты также будут затронуты. Если вы вместо этого хотите агрегировать по всему индексу без ограничения Роберта Дауни (что обычно имеет место), вы можете использовать отфильтрованные агрегации .

...