程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何使用Elastic Java Client与AWS Elasticsearch Service对话?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决如何使用Elastic Java Client与AWS Elasticsearch service对话??

开发过程中遇到如何使用Elastic Java Client与AWS Elasticsearch service对话?的问题如何解决?下面主要结合日常开发的经验,给出你关于如何使用Elastic Java Client与AWS Elasticsearch service对话?的解决方法建议,希望对你解决如何使用Elastic Java Client与AWS Elasticsearch service对话?有所启发或帮助;

信不信由你,AWS不会使用9200和9300启动Elasticsearch。它是通过普通的旧端口80启动的。

因此,为了演示,请尝试…

curl -XPOST "http://xxx-xxxxxxxx.us-West-2.es.amazonaws.com:80/myIndex/myType" -d '["name":"Edmond"}'

要么

curl -XPOST "https://xxx-xxxxxxxx.us-West-2.es.amazonaws.com:443/myIndex/myType" -d '["name":"Edmond"}'

它的响应应为:{index”:“ myIndex”,“ _ type”:“ myType”,“ _ ID”:“ SOME_ID #”,“ _ version”:1,“ created”:truE}

签入Kibana,您会发现它在那里。

因此,在您的代码中,它应该是:

ClIEnt clIEnt = TransportClIEnt.builder().build()
    .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByname("xxx-xxxxxxxx.us-West-2.es.amazonaws.com"), 80));

不幸的是,我不了解如何使用传输客户端通过SSL / httpS传输加密。您可以尝试使用常规的REST调用来代替使用jeRSEY。

最后,确保正确配置了Elasticsearch访问策略。类似于以下内容:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "SID": "",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "es:*",
      "resource": "arn:aws:es:us-east-1:yyyyyyy:domain/myDomain/*"
    },
    {
      "SID": "",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "es:*",
      "resource": "arn:aws:es:us-east-1:yyyyyyyyy:domain/myDomain"
    }
  ]
}

上面的访问策略是完全开放的,不建议在远程生产环境中使用。请注意…

解决方法

我已经使用AWS Elasticsearch service(Not EC2)设置了Elasticsearch服务器。它给了我一个端点https://xxx-xxxxxxxx.us-
West-2.es.amazonaws.com/,如果我单击该端点(请注意,没有指定端口),我可以得到预期的结果

{
  status: 200,name: "Mastermind",cluster_name: "xxxx",version: {
    number: "1.5.2",build_hash: "yyyyyy",build_timestamp: "2015-04-27T09:21:06Z",build_snapshot: false,lucene_version: "4.10.4"
  },tagline: "You Know,for Search"
}

问题是如何在没有端口号的情况下通过Elasticsearch Java客户端获取此信息?我得到的示例代码是

Client client = TransportClient.builder().build()
    .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("host1"),9300));

如果我使用此代码,并用端点替换“ host1”,则将得到“ NoNodeAvailableException”

ps:我使用的Java客户端版本是2.0.0。

编辑 我最终决定与第三方REST客户端jest一起使用。但是Brooks在下面回答的内容也非常有用-AWS确实将端口80用于http,将443用于https。对我来说,阻止者是防火墙。

Edit2 AWS ES服务文档明确表示:
该服务在端口80上支持http,但不支持TCP传输。

大佬总结

以上是大佬教程为你收集整理的如何使用Elastic Java Client与AWS Elasticsearch Service对话?全部内容,希望文章能够帮你解决如何使用Elastic Java Client与AWS Elasticsearch Service对话?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。