我在负载均衡模式下有很少的ES服务器。当我对host1:9200执行查询时,host1,host2,host3之一可以处理此查询。是否有可能在ES响应中以某种方式获得此主机名?
换句话说,我正在寻找MS SQL Server中“select myfield,@@ servername FROM table”的等价物。
由于
答案 0 :(得分:2)
如果您使用的是http api,则可以从响应中的Host
标题中获取主机名。
例如,如果使用curl进行查询并使用-v
标志,则会打印响应标头,您可以在其中找到发送响应的主机名,在本例中为localhost:
curl -XGET "http://localhost:9200/test/_search" -v -d '
{
"query": {"match_all":{}}
}'
* About to connect() to localhost port 9200 (#0)
* Trying ::1... connected
* Connected to localhost (::1) port 9200 (#0)
> GET /test/_search HTTP/1.1
> User-Agent: curl/7.21.4 (universal-apple-darwin11.0) libcurl/7.21.4 OpenSSL/0.9.8r zlib/1.2.5
> Host: localhost:9200
> Accept: */*
> Content-Length: 32
> Content-Type: application/x-www-form-urlencoded
>
< HTTP/1.1 200 OK
< Content-Type: application/json; charset=UTF-8
< Content-Length: 875
<
在任何情况下都要记住,如果您将数据拆分为多个分片,则多个主机可以成为查询过程的一部分。