两个elasticsearch服务器之间的负载平衡

Rav*_*mar 1 load-balancing elasticsearch

我有两个ElasticSearch服务器:

http://12.13.54.333:9200
Run Code Online (Sandbox Code Playgroud)

http://65.98.54.10:9200
Run Code Online (Sandbox Code Playgroud)

在第一台服务器中,我有100k的数据(id= 1到id= 100k),在第二台服务器中我有100k的数据(id= 100k + 1到200k).

我希望obama在两台服务器上的一个请求中对该关键字进行文本搜索.这可能吗?

jav*_*nna 7

你的问题有点通用......我会尽量不给出"依赖"的答案,但为了做到这一点,我必须做出几个假设.

这两个服务器实际上是同一个elasticsearch集群上的两个节点吗?我想是这样.

您是否在由多个分片组成的弹性搜索索引上编制数据?我想是这样.elasticsearch中的默认值是五个分片,在您的情况下会导致在一个节点上有两个分片,在另一个节点上有三个分片.

然后,您可以通过REST API将查询发送到其中一个节点.查询将在您查询的索引(可能甚至多于一个)组成的所有分片上执行.如果您有副本,则在查询时也可能使用副本分片.接收到您的查询的节点将减少从返回最相关的所有分片中获得的搜索结果.

更具体地说,每个分片上的搜索阶段很可能只收集文档ID及其分数.一旦您点击的节点减少了结果,它就可以仅为它应该返回的文档获取所有需要的字段(通常是_source字段).

对弹性搜索有什么好处,即使你在不同的索引上索引数据,你也可以查询多个索引,一切都和我描述的一样.在一天结束时,每个索引都由分片组成,并且查询十个索引,每个分片每个与每个分片查询一个索引相同.

我所描述的内容适用于elasticsearch使用的默认search_type,称为query_then_fetch.还有其他搜索类型,您可以在需要时最终使用,例如,不执行任何减少或获取的计数,但只返回在所有分片上执行它的查询的命中数,并返回所有命中的总和对于每个碎片.