_id的ElasticSearch跨集群GET

时间:2019-04-29 14:17:40

标签: elasticsearch

我有3个ElasticSearch 6.3.2集群:主集群,东集群和西集群。 “ main”配置为在东西方进行跨集群搜索。这可以很好地工作,因为我可以执行POST查询来查询main并从所有3个集群中获取数据。但是,我很难对来自main的远程集群执行一些GET查询。例如:

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
}

如果我通过对http://esmain.example.com:9200/west:error-2019.04/_search?ignore_unavailable=true&size=1&timeout=300000ms的POST执行相同的查询,则

具有此主体:

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

我得到正确的记录,没有错误。可以通过GET没问题(即http://esmain.example.com:9200/error-2019.04/error/rf2P2mkBIndI5iSJGgRd)查询位于主群集上的记录,因此,我很确定我的文档类型和语法正确。

尽管POST是一种解决方法,但我希望能够为开发人员提供易于使用的URL,而不是POST正文,因为它使他们更容易找到错误记录。 / p>

1 个答案:

答案 0 :(得分:1)

跨集群搜索仅用于发送搜索查询(即在_search端点上),而不是发送GET或DELETE(按ID)查询,这些查询仍必须直接在相应的集群上进行。

您可以做的一件事是为您的开发人员提供一个更简单的无主体搜索查询,例如下面的查询,其实现与带有主体的POST完全相同的目的:

GET http://esmain.example.com:9200/west:error-2019.04/_search?q=_id:M2ywYGoBhIcw2VqxQ9FD