ElasticSearch кросс-кластер GET по _id - PullRequest
0 голосов
/ 29 апреля 2019

У меня есть 3 кластера ElasticSearch 6.3.2: основной, восточный и западный. 'main' сконфигурирован для выполнения поиска между кластерами на востоке и западе Это хорошо работает, так как я могу выполнять POST-запросы к main и получать данные из всех 3 кластеров. Однако у меня возникают трудности при выполнении некоторых запросов GET в удаленные кластеры из main. Например:

http://esmain.example.com:9200/west:error-2019.04/_search

Производит хиты; одна запись имеет _id из "M2ywYGoBhIcw2VqxQ9FD"

Если я попытаюсь запросить только эту запись через GET, как в:

http://esmain.example.com:9200/west:error-2019.04/error/M2ywYGoBhIcw2VqxQ9FD

Я получаю:

{
  error: {
    root_cause: [
      {
        type: "index_not_found_exception",
        reason: "no such index",
        resource.type: "index_expression",
        resource.id: "west:error-2019.04",
        index_uuid: "_na_",
        index: "west:error-2019.04"
      }
    ],
    type: "index_not_found_exception",
    reason: "no such index",
    resource.type: "index_expression",
    resource.id: "west:error-2019.04",
    index_uuid: "_na_",
    index: "west:error-2019.04"
  },
  status: 404
}

Если я сделаю тот же запрос через POST на http://esmain.example.com:9200/west:error-2019.04/_search?ignore_unavailable=true&size=1&timeout=300000ms

с этим телом:

{
    "query": {
        "bool": {
            "must": 
                { "match": { "_id": "M2ywYGoBhIcw2VqxQ9FD" } }
        }
    }
}

Я получил правильную запись, без ошибок. Записи, находящиеся в главном кластере, могут быть запрошены через GET без проблем (т. Е. http://esmain.example.com:9200/error-2019.04/error/rf2P2mkBIndI5iSJGgRd),, поэтому я почти уверен, что мой тип документа и синтаксис верны.

Хотя POST - это обходной путь, я хотел бы предоставить разработчикам простой в использовании URL-адрес, а не тело POST, поскольку это облегчает им поиск записи об ошибке.

1 Ответ

1 голос
/ 29 апреля 2019

Межкластерный поиск предназначен ТОЛЬКО для отправки поисковых запросов (т. Е. На конечную точку _search), а не запросов GET или DELETE (по идентификатору), которые все же должны выполняться непосредственно в соответствующем кластере.

Одна вещь, которую вы можете сделать, это предоставить вашим разработчикам более простой поисковый запрос без тела, такой как следующий, который достигает точно такой же цели, что и POST с телом:

GET http://esmain.example.com:9200/west:error-2019.04/_search?q=_id:M2ywYGoBhIcw2VqxQ9FD
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...