Запрос Elasticsearch, который возвращает либо все, либо найденные хиты - PullRequest
0 голосов
/ 15 марта 2020

Я могу передать необязательные параметры в мой es-запрос. Если параметры не передаются, es-запрос должен просто возвращать все, не учитывая фильтр параметров.

Что я получил до сих пор:

{
    "query": {
      "bool": {
          "must": [
            {
              "terms": {
                "person": [
                  "donald trump",
                  "bernie sanders"
                ]
              }
            },
            {
              "range": {
                "date": {
                  "gte": "now-7d",
                  "lte": "now"
                }
              }
            }
          ],
          "should": {
            "terms": {
              "source_name": [
                "nytimes.com"
              ]
            }
          }
        }
    }
}

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

Как мне этого добиться?

1 Ответ

1 голос
/ 15 марта 2020

Elasti c search DSL является декларативным языком, поэтому нет возможности использовать если еще logi c (поток управления). Вы не должны добавлять предложение (если ввод пуст) при создании самого запроса. Или вы можете использовать imum_should_match . В обоих случаях вам нужно будет изменить язык, который вы используете для создания вашего elasti c поискового запроса

Запрос:

{
"query": {
  "bool": {
  "must": [
    {
      "terms": {
        "person": [
          "donald trump",
          "bernie sanders"
        ]
      }
    },
    {
      "range": {
        "date": {
          "gte": "now-7d",
          "lte": "now"
        }
      }
    }
  ],
  "should": {
    "terms": {
      "source_name": [
        "nytimes.com"
      ]
    }
  }, 
"minumum_should_match":1 --> 0 if input is empty
}
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...