【问题标题】:Elasticsearch Java client: can't connect to the remote serverElasticsearch Java 客户端:无法连接到远程服务器
【发布时间】:2015-09-20 13:27:38
【问题描述】:

我需要使用此处提供的 url 连接到位于远程的 ElasticSearch 索引: http://api.exiletools.com/info/indexer.html

但是,我不知道如何在 Java 中做到这一点。

Docs on ES Java Client 根本没有太多信息。
我也没有找到任何JavaDocs,它们存在吗?

现在,有一些用 Python 编写的工作示例,确认服务器已启动并正在运行,连接部分如下所示:

es = Elasticsearch([{
  'host':'api.exiletools.com',
  'port':80,
  'http_auth':'apikey:DEVELOPMENT-Indexer'
}])

我想做什么:

client = new TransportClient()
                    .addTransportAddress(new InetSocketTransportAddress("apikey:DEVELOPMENT-Indexer@api.exiletools.com/index", 9300));

还尝试了端口 9200 和 80

这会导致: java.nio.channels.UnresolvedAddressException
和 NoNodeAvailableException

【问题讨论】:

  • 是从您运行它的地方访问的 url,即 api.exiletools.com?
  • 正如我所说,我有一个使用此 url 的 Python 脚本。

标签: java elasticsearch


【解决方案1】:

Shop Indexer API 在端口 80 上提供了一个 HTTP 入口点,以通过 HTTP 协议与其 ES 集群进行通信。 ES TransportClient 不是正确的客户端,因为它只能通过 TCP 进行通信。

由于 Elasticsearch 不提供开箱即用的 HTTP 客户端,因此您需要为此使用特定的库(例如 Jest),或者您可以汇总自己的 REST 客户端。

实现后者的一种简单方法是使用 Spring 的RestTemplate

// create the REST template
RestTemplate rest = new RestTemplate()
// add the authorization header
HttpHeaders headers = new HttpHeaders();
headers.add("Authorization", "DEVELOPMENT-Indexer");

// define URL and query
String url = "http://api.exiletools.com/index/_search";
String allQuery = "{\"query\":{\"matchAll\":{}}}";

// make the request
HttpEntity<String> httpReq = new HttpEntity<String>(allQuery, headers);
ResponseEntity<String> resp = rest.exchange(url, HttpMethod.POST, httpReq, String.class)

// retrieve the JSON response
String body = resp.getBody();

【讨论】:

  • 是的,服务所有者刚刚确认了这一点,他不能允许本地 ES Java 客户端的访问,因为如果不使用 Shield,他就无法保护它......我想避免使用 Spring,所以我'将研究这个 Jest 项目
  • 他绝对有可能保护原生 ES 客户端with Shield。无论如何,请注意,如果您同意,也可以使用裸露的Apache HTTP client。基本上,任何 Java HTTP 客户端库都可以使用,只要选择你喜欢的即可。
  • 刚刚使用Spring尝试了这个方法,它马上就奏效了,谢谢,得到了服务器的响应。 Jest 库由于某种原因无法工作,无论您发送什么查询,都会不断抛出格式错误的 json 异常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-19
  • 2022-01-21
  • 2016-07-07
  • 1970-01-01
  • 2020-06-17
  • 1970-01-01
  • 2012-10-15
相关资源
最近更新 更多