我已经使用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传输。
信不信由你,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"
}
]
}
注意: 上面的访问策略是完全开放的,不建议在远程生产环境中使用。请注意…
我试图使用ESLint linter与Jest测试框架。 Jest测试使用一些全局变量运行,比如,我需要告诉linter关于它的信息;但棘手的是目录结构,Jest将测试与源代码一起嵌入文件夹中,因此目录结构类似于: 通常,我会将所有测试放在一个目录下,我可以在那里添加一个文件来添加全局变量。。。但是我当然不想在每一个目录中添加文件。 目前,我刚刚将测试全局变量添加到了global文件中,但由于这意
我正在开发一款名为Galaxywar的游戏,我正在尝试制作一个地图选择菜单。我发现了一个问题,当我使用带有在带有的JGroup上,具有指定大小的子组件(JGroup)占据了面板的整个高度(全部一起),而不是指定的高度! 以下是我的代码: 我对此进行了长时间的研究,但到目前为止找不到任何解决方案。
我发现了osmbonuspack,但是wiki中的API信息和文档非常少。 http://code.google.com/p/osmbonuspack/ 我认为这个库对升级osmdroid很有意思,但我无法学会使用它。 已经被人利用了?
我做错了什么?
问题内容: 我有一些这样的代码: 每个’for’语句中的 flush() 是否必要?我听说flush()会在调用 close() 时自动调用。如果我这样写代码: 而且我不会再写 pw.flush() 了吗?谢谢。 问题答案: 是 可能 不是在你的榜样必需的。 它的作用是确保在调用之前写给写程序的任何内容都写到基础流中,而不是放在某个内部缓冲区中。 该方法在几种类型的情况下派上用场: 如果另一个进程
Typescript在这行抱怨道: 我得到这个错误: 因为postId被接收为<code>req.params。postId</code>它是string类型,所以我将其转换为mongoose objectId,但仍然有相同的错误: pull() 在猫鼬数组中工作。这行代码是我在javacsript中实现的。我正在将我的项目转换为打字稿。这是用户模型的用户界面和架构。 这里发布架构和界面