Использование match_all с фильтрами - PullRequest
3 голосов
/ 08 мая 2019

У меня есть страница, которая позволяет пользователям запрашивать наборы данных и применять фильтры. Они также могут применять фильтры без запроса со строкой. Для этого я пытаюсь использовать match_all с фильтрами, но получаю следующую ошибку

"{" ошибка ": {" ROOT_CAUSE ": [{" типа ":" parsing_exception " "причина":" [match_all] неправильно сформированный запрос, ожидается [END_OBJECT], но найден [FIELD_NAME] " "линии": 1, "столбец": 26}], "Тип": "parsing_exception", "причина":" [match_all] неправильно сформированный запрос, ожидается [END_OBJECT], но найден [FIELD_NAME] " "линии": 1, "столбец": 26}, "Статус": 400}",

Это пример параметров поиска, которые я создаю и отправляю эластичному клиенту.

[
  "type" => "events"
  "index" => "events"
  "body" => [
    "query" => [
      "match_all" => {}
      "bool" => [
        "filter" => [
          "range" => [
            "start_date.date" => [
              "gte" => "01/05/2019"
              "lte" => "05/2019"
              "format" => "dd/MM/yyyy||MM/yyyy"
            ]
          ]
        ]
      ]
    ]
    "from" => 0
    "size" => 30
  ]
]

Я не могу понять, как использовать их обоих. Есть указатели? Спасибо.

1 Ответ

2 голосов
/ 08 мая 2019

Вам нужно будет обернуть ваш запрос в запрос bool следующим образом:

"query": {
    "bool" : {
        "must" : {
        "match_all": {}
        },
        "filter": {
        "range" : { /* your filter here*/ }
        }
    }
}

Просто оберните запрос bool и must вокруг вашего match_all, и он должен работать.

Я не знаю точный синтаксис PHP, но он должен выглядеть примерно так:

[
  "type" => "events"
  "index" => "events"
  "body" => [
    "query" => [
      "bool" => [
        "must" => [ "match_all" => {}]
        "filter" => [
          "range" => [
            "start_date.date" => [
              "gte" => "01/05/2019"
              "lte" => "05/2019"
              "format" => "dd/MM/yyyy||MM/yyyy"
            ]
          ]
        ]
      ]
    ]
    "from" => 0
    "size" => 30
  ]
]

Для справки см. Документацию Elasticsearch Reference [7.0] »Query DSL» Compoundзапросы »Bool Query , содержит пример, подобный вашему, с match_all в сочетании с фильтрами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...