Запрос ElasticSearch - сопоставить конкретные документы из списка кортежей - PullRequest
0 голосов
/ 01 ноября 2018

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

Кортежи будут повторять следующее:

[{"field_A": value_1, "field_B": value_2}, {"field_A": value_3, "field_B": value_4}, ...]

Я могу написать запрос, который достигает этого, используя запрос bool; набор предложений must с двумя вложенными предложениями must, каждое из которых должно содержать один запрос запроса.

"bool": {
  "should": [
    {
      "bool": {
        "must": [
          {
            "term": {
              "field_A": {
                "value": "value_1"
              }
            }
          },
          {
            "term": {
              "field_B": {
                "value": "value_2"
              }
            }
          }
        ]
      }
    },
    {
      "bool": {
        "must": [
          {
            "term": {
              "field_A": {
                "value": "value_3"
              }
            }
          },
          {
            "term": {
              "field_B": {
                "value": "value_4"
              }
            }
          }
        ]
      }
    },
    ...
  ]
}

Однако список кортежей, предоставленных в качестве параметра для запроса, может быть «бесконечно» длинным, и кажется, что это решение станет чрезвычайно многословным и неэффективным довольно быстро.

Есть ли другой стиль запроса, который я пропустил, который позволяет мне по существу выполнять запрос терминов, но по отношению к списку многополевых кортежей, а не к списку отдельных элементов?

Заранее спасибо за любые указатели!

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