我有两个ElasticSearch服务器:
http://12.13.54.333:9200
和
http://65.98.54.10:9200
在第一个服务器中,我有100k的数据(
id
= 1到id
= 100k),在第二个服务器中,我有100k的数据(id
= 100k + 1到200k)。我想在两个服务器上的一个请求中对关键字
obama
进行文本搜索。这可能吗?
最佳答案
您的问题有点笼统……我将尽量不给出“取决于”的答案,但是为了做到这一点,我必须作一些假设。
这两个服务器实际上是同一 flex 搜索集群上的两个节点吗?我想是这样。
您是否在由多个分片组成的elasticsearch索引上为数据建立索引?我想是这样。 elasticsearch的默认值为五个分片,在您的情况下,这将导致一个节点上有两个分片,而另一节点上有三个。
然后,您可以通过REST API将查询发送到这些节点之一。该查询将在要查询的索引所组成的所有碎片上执行(甚至可以大于一个)。如果您有副本,则在查询时也可能会使用副本碎片。接收到查询的节点将减少所有碎片返回最相关的搜索结果。
更具体地说,在每个分片上的搜索阶段很可能只会收集文档ID及其分数。一旦您命中的节点减少了结果,它就只能获取应该返回的文档的所有必需字段(通常是_source field)。
elasticsearch的优点在于,即使您在不同索引上为数据建立索引,您也可以查询多个索引,并且一切工作都与我所描述的相同。在一天结束时,每个索引都由分片组成,查询每个带有一个分片的十个索引与查询带有十个分片的一个索引相同。
我所描述的内容适用于elasticsearch使用的默认search_type,称为query_then_fetch
。还有其他一些搜索类型,您最终可以在需要时使用它们,例如,count不会执行任何减少或获取操作,而只是返回对所有分片执行查询的命中次数,并返回所有命中之和对于每个碎片。
关于elasticsearch - 两台Elasticsearch服务器之间的负载平衡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16748975/