我使用Docker Compose运行了一个简单的Elasticsearch实例:
---
version: '2'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:6.1.1
hostname: elasticsearch
environment:
- cluster.name=docker-cluster
- bootstrap.memory_lock=true
- ES_JAVA_OPTS=-Xms512m -Xmx512m
ulimits:
memlock:
soft: -1
hard: -1
mem_limit: 1g
ports:
- 9200:9200
kibana:
image: docker.elastic.co/kibana/kibana:6.1.1
environment:
SERVER_NAME: "0.0.0.0"
ELASTICSEARCH_URL: http://elasticsearch:9200
ports:
- 5601:5601
我可以使用localhost从浏览器访问它,但是当我运行我的应用程序并连接到它时,遇到了一些问题。从我能够跟踪到的内容来看,应用程序似乎成功连接到Elasticsearch实例,然后解析了它绑定的IP,然后使用该IP地址与Elasticsearch实例进行通信。
来自Fiddler:
"host": "172.18.0.4"
为了能够从C#应用程序成功连接到我的Elasticsearch实例,我应该改变什么?
NEST版本:5.5.0
(注意:此答案使用NEST 7.1.0和Elasticsearch 7.2.0,但基本概念相同)。
SniffingConnectionPool
植入连接池后,将使用http.publish_address
节点的。这意味着客户端必须可以访问http发布地址。如果未显式设置,它将使用from中的值http.host
,如果未设置,将使用network.host
,这将是专用网络上的地址。
使用docker之类的配置
version: '2.2'
services:
es01:
image: docker.elastic.co/elasticsearch/elasticsearch:7.2.0
container_name: es01
environment:
- node.name=es01
- discovery.seed_hosts=es02
- cluster.initial_master_nodes=es01,es02
- cluster.name=docker-cluster
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- "http.port=9200"
- "http.publish_host=_local_"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- esdata01:/usr/share/elasticsearch/data
ports:
- 9200:9200
networks:
- esnet
es02:
image: docker.elastic.co/elasticsearch/elasticsearch:7.2.0
container_name: es02
environment:
- node.name=es02
- discovery.seed_hosts=es01
- cluster.initial_master_nodes=es01,es02
- cluster.name=docker-cluster
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- "http.port=9201"
- "http.publish_host=_local_"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- esdata02:/usr/share/elasticsearch/data
ports:
- 9201:9201
networks:
- esnet
volumes:
esdata01:
driver: local
esdata02:
driver: local
networks:
esnet:
es01
节点被映射到localhost:9200
和es02
到localhost:9201
。我们本来可以指定它es02
在9200上的容器中运行,并将其映射到9201的主机端口,但是这样做的问题是es02
http.publish_address仍然是127.0.0.1:9200
,这将成为SniffingConnectionPool
播种时最终使用的内容节点。为避免这种情况,我们在es02
与的不同端口上运行es01
,以便http发布地址将不同。
使用以上配置,http://localhost:9200/_nodes?filter_path=nodes.*.http
返回
{
"nodes": {
"CSWncVnxS1esOm1KQtOR3A": {
"http": {
"bound_address": ["0.0.0.0:9200"],
"publish_address": "127.0.0.1:9200",
"max_content_length_in_bytes": 104857600
}
},
"rOAp0T57TgSI_zU1L-T-vw": {
"http": {
"bound_address": ["0.0.0.0:9201"],
"publish_address": "127.0.0.1:9201",
"max_content_length_in_bytes": 104857600
}
}
}
}
( 如果尝试这样做,则节点名称将有所不同 )。现在,SniffingConnectionPool
将工作
private static void Main()
{
var defaultIndex = "posts";
var uris = new[]
{
new Uri("http://localhost:9200"),
new Uri("http://localhost:9201")
};
var pool = new SniffingConnectionPool(uris);
var settings = new ConnectionSettings(pool)
.DefaultIndex(defaultIndex);
var client = new ElasticClient(settings);
var response = client.Nodes.Info();
foreach (var node in response.Nodes)
{
Console.WriteLine($"{node.Key} http publish_address is: {node.Value.Http.PublishAddress}");
}
}
版画
CSWncVnxS1esOm1KQtOR3A http publish_address is: 127.0.0.1:9200
rOAp0T57TgSI_zU1L-T-vw http publish_address is: 127.0.0.1:9201
问题内容: 我索引我的查询,如下所示: 现在,如何使用ES的过滤器功能将传入文档与此查询匹配?要说在这方面缺少NEST文档,那就太轻描淡写了。我尝试使用call,但是现在不推荐使用,他们建议使用search api,但不要告诉如何将其与percolator一起使用… 我正在使用 ES v5 和相同版本的NEST lib。 问题答案: GA发布后,有计划改进 5.x 的文档。我知道在许多地方文档可能
问题内容: 我正在寻找一种在Java App(使用JDBC)中打开Access MDB文件的方法。 快速的Google搜索建议我为此需要JDBC-ODBC Bridge。 这是否意味着我需要配置要在其上运行应用程序的每个系统,以便为要打开的MDB提供ODBC DSN? 还有一个问题(因为我以前从未使用过ODBC):通信是通过某种套接字(以客户机/服务器方式)还是通过方法/函数调用(例如嵌入Derb
本文向大家介绍java使用HttpSession实现QQ访问记录,包括了java使用HttpSession实现QQ访问记录的使用技巧和注意事项,需要的朋友参考一下 java如何使用HttpSession实现QQ的访问记录,本文为大家揭晓答案,具体内容如下 1. 编写QQ空间数据类(QQS.java) 2. 编写一个现实QQ数据和浏览记录的页面(ListServlet.java) 3. 编写一个存储
本文向大家介绍python使用代理ip访问网站的实例,包括了python使用代理ip访问网站的实例的使用技巧和注意事项,需要的朋友参考一下 实例如下所示: whatismyip是一个查询ip的网站,上面代码我使用了27.155.101.233,端口号是3128对这个网站进行访问 这是输出信息: 可以看到已经使用了27.155.101.233这个代理ip对whatismyip进行访问,但是没有做到高
问题内容: 我在让NEST的DeleteByQuery方法工作时遇到了一些困难。 很简单,查询永远找不到要删除的内容,我也不知道为什么。我正在使用相同的查询来返回记录(使用搜索),并且一切正常。 我只是刚刚开始使用NEST,所以我确定这是一个非常简单的问题,而且我有点昏暗! 任何帮助/建议,不胜感激。 问题答案: 的是上的.NET方法支票是否相等。 如果您更改对它的呼叫,则应该可以使用。