Несколько запросов в одном ElasticSearch Query - PullRequest
0 голосов
/ 17 мая 2018

Вот пример элемента, проиндексированного в ES:

{
  "_id" : ..,
  "class": "A",
  "name": "item1"
}

Мне нужен один запрос, в котором я могу получить все элементы одного класса с именем "item1". В общем, я хочу, чтобы все проиндексированные элементы были с классом A, только с именем.

Я могу сделать это с 2 запросами:

Запрос 1:

SEARCH
{
"query": {
   "query_string": {
       "default_field": "name",
            "query": "item1"
            }
        }

Затем из этого я получаю класс и пишу этот запрос:

SEARCH
{
"query": {
   "query_string": {
       "default_field": "class",
            "query": "A"
            }
        }

Есть идеи? Я знаю, что есть простой способ, но я не могу его найти ...

1 Ответ

0 голосов
/ 18 мая 2018

Вы можете объединить несколько запросов с предложениями, используя bool запрос . В этом случае должны быть удовлетворены два критерия, поэтому оба запроса должны быть must пунктами

{
  "query": {
    "bool": {
      "must": [
        {
          "query_string": {
            "query": "item1",
            "fields": [
              "name"
            ]
          }
        },
        {
          "query_string": {
            "query": "A",
            "fields": [
              "class"
            ]
          }
        }
      ]
    }
  }
}

Если вам не нужны оценки релевантности, что, по-видимому, не так, как в данном случае, оба запроса могут быть filter предложениями вместо must предложений.

Если name и class отображаются как keyword типы данных , вы можете использовать запрос на уровне терминов, а не полнотекстовый запрос, такой как query_string запрос. Вот как это будет выглядеть, используя filter clauses

{
  "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "name": {
              "value": "item1"
            }
          }
        },
        {
          "term": {
            "class": {
              "value": "A"
            }
          }
        }
      ]
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...