Elasticsearch Запрос по индексам, имя которых соответствует определенному шаблону - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть несколько индексов в моей базе данных Elasticsearch следующим образом

Index_2019_01

Index_2019_02

Index_2019_03

Index_2019_04

.
.

Index_2019_12

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

select count(*) from Index_2019_0[1-3] where LanguageId="English"

Как правильно сделать это в Elasticsearch?

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

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

GET /index_2019_*/_search
{
  "query": {
    "match": {
      "LanguageID": "English"
    }
  }
}

ИЛИ в URL

curl -XGET "http://<host>:<port>/index_2019_*/_search" -H 'Content-Type: application/json' -d'{"query": {"match":{"Hex_Impact": "HIGH"}}}'
0 голосов
/ 07 февраля 2019

Как я могу запросить несколько индексов с определенными именами?

Это может быть достигнуто с помощью многоиндексного поиска , который является встроенной возможностью Elasticsearch.Для достижения описанного поведения следует попробовать запрос, подобный следующему:

POST /index_2019_01,index_2019_02/_search
{
  "query": {
    "match": {
      "LanguageID": "English"
    }
  }
}

Или, используя URI search :

curl 'http://<host>:<port>/index_2019_01,index_2019_02/_search?q=LanguageID:English'

Более подробная информация доступна здесь .Обратите внимание, что Elasticsearch требует, чтобы имена индексов были строчными.

Можно ли использовать регулярное выражение для указания шаблона имени индекса?

Короче говоря, нет.Имя индекса можно использовать в запросах, используя специальное «виртуальное» поле _index, но его использование ограничено.Например, нельзя использовать регулярное выражение для имени индекса:

_index представляется как виртуальное поле - он не добавляется в индекс Lucene как реальное поле.Это означает, что вы можете использовать поле _index в запросе терминов или терминов (или любом запросе, который переписан в запросе терминов, например запрос match, query_string или simple_query_string), но он не поддерживает префикс , подстановочный знак,регулярные выражения или нечеткие запросы.

Например, запрос сверху можно переписать так:

POST /_search
{
  "query": {
    "bool": {
      "must": [
        {
          "terms": {
            "_index": [
              "index_2019_01",
              "index_2019_02"
            ]
          }
        },
        {
          "match": {
            "LanguageID": "English"
          }
        }
      ]
    }
  }
}

, который использует bool и условия запросов.

Надеюсь, это поможет!

...