Как написать вложенный запрос в сочетании с фильтрами в Elastic Search? - PullRequest
0 голосов
/ 30 октября 2018

Мне нужно сделать вложенный запрос, который пытается искать в массиве объектов. Помимо этого, у меня есть и другие параметры, по которым мне нужно искать. Я использую фильтры для тех. Как эффективно объединить фильтры и вложенный запрос? Извините, я не эксперт по ES.

Вот запрос, который я пытался выполнить в Кибане:

GET test-index/_search
    {
      "query": {
        "bool": {
          "filter": [
            {
              "term": {
                "isPublic": true
              }
            },
            {
              "term": {
                "isDeleted": false
              }
            }
          ]
        },
        "nested": {
          "path": "data.location.countries",
          "query": {
            "bool": {
              "must": [
                {
                  "match": {
                    "data.location.countries.name": "United States"
                  }
                },
                {
                  "range": {
                    "data.location.countries.weight": {
                      "gt": 30
                    }
                  }
                }
              ]
            }
          }
        }
      },
      "size": "60",
      "from": 0,
      "sort": [
        {
          "followers": {
            "order": "desc"
          }
        }
      ]
    }

Возвращено с ошибкой:

{
  "error": {
    "root_cause": [
      {
        "type": "parsing_exception",
        "reason": "[bool] malformed query, expected [END_OBJECT] but found [FIELD_NAME]",
        "line": 17,
        "col": 5
      }
    ],
    "type": "parsing_exception",
    "reason": "[bool] malformed query, expected [END_OBJECT] but found [FIELD_NAME]",
    "line": 17,
    "col": 5
  },
  "status": 400
}

Может кто-нибудь пролить немного знаний по этому поводу?

1 Ответ

0 голосов
/ 30 октября 2018

Переместить вложенный запрос внутрь bool.filter:

{
  "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "isPublic": true
          }
        },
        {
          "term": {
            "isDeleted": false
          }
        },
        {
          "nested": {
            "path": "data.location.countries",
            "query": {
              "bool": {
                "must": [
                  {
                    "match": {
                      "data.location.countries.name": "United States"
                    }
                  },
                  {
                    "range": {
                      "data.location.countries.weight": {
                        "gt": 30
                      }
                    }
                  }
                ]
              }
            }
          }
        }
      ]
    }
  },
  "size": "60",
  "from": 0,
  "sort": [
    {
      "followers": {
        "order": "desc"
      }
    }
  ]
}

Вы не можете использовать более 1 запроса вне составного запроса afaik.

...