1

我有两个 ElasticSearch 服务器:

http://12.13.54.333:9200

http://65.98.54.10:9200

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

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

4

2 回答 2

7

你的问题有点笼统......我会尽量不给出“取决于”的答案,但为了做到这一点,我必须做出一些假设。

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

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

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

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

elasticsearch 的好处在于,即使您在不同的索引上建立了索引数据,您也可以查询多个索引,并且一切都会像我描述的那样工作。归根结底,每个索引都是由分片组成的,用一个分片查询十个索引与用十个分片查询一个索引是一样的。

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

于 2013-05-25T13:51:58.957 回答
1

雷文德拉库马尔,

Elasticsearch 应该为您处理这些问题。Elasticsearch 是从零开始构建的,用于分布式并进行分布式搜索。

基本上,如果这些服务器在同一个集群中,您将拥有两个分片(第一个拥有从 1 到 100k 的 id,第二个拥有从 100001 到 200k 的 id)。当您搜索某些内容时,它命中哪个服务器并不重要,它会在两台服务器上进行搜索并为客户端返回结果。elasticsearch 的内部行为过于广泛,无法在此解释。

于 2013-05-25T12:49:49.997 回答