Напишите один запрос вместо четырех - PullRequest
0 голосов
/ 08 июля 2020

Уважаемые,

У меня проблема с написанием правильного сложного запроса. Я пытаюсь написать один запрос, который будет делать то же самое, что и другие четыре запроса, которые должны: подсчитывать документы с кодами 1 ?? или 2 ?? в поле ci.rc и подсчитать документы с кодами 9 ?? в поле ci.rc и подсчитать документы с кодом 0 ?? в поле ci.r c и иметь коды 1210 или 1230 в поле ci.mti и подсчитать документы с кодами 1400 или 1420 в поле ci.mti

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

Мой скелет одного запроса:

GET /log-2020.07.08/_search?size=0
{
  "query": {
    "bool": {
      "should": [
        {
          "query_string": {
            "default_field": "ci.rc",
            "query": "(1??) or (2??)"
          }
        },
        {
          "query_string": {
            "default_field": "ci.rc",
            "query": "(9??)"
          }
        },
        {
          "bool": {
            "must": [
              {
                "regexp": {
                  "ci.rc": "0[0-9]{2}"
                }
              },
              {
                "regexp": {
                  "ci.mti": "[0-9]{2}[3|5|7|9][0-9]{1}"
                }
              }
            ]
          }
        }
      ]
      }
    },
    "aggs": {
      "rc": {
        "terms": {"field": "ci.rc.keyword","size": 10}
      }
    }
  }

Отсутствует условие даты и последний отдельный запрос: подсчитайте количество документов, которые имеют коды 1400 или 1420 в поле ci.mti

С уважением, Дэн

1 Ответ

0 голосов
/ 08 июля 2020

Запрос строки запроса предназначен только для этих случаев использования. В запросе строки запроса вы можете записать каждый запрос в строковом формате

Здесь может быть уточненный запрос

GET /log-2020.07.08/_search?size=0

{
  "query": {
    "query_string": {
      "query": "(ci.rc:((1??) or (2??) or (9??))) and (ci.rc:/0[0-9]{2}/) and ci.mti:/[0-9]{2}[3|5|7|9][0-9]{1}/"
    }
  }
}

Также вот ссылка с синтаксисом для размещения почти каждого типа запроса в строке запроса

https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html

...