在将查询分发到节点时,如何在Elassandra中确定token_range
?
跨Elassandra节点复制数据时会发生什么?
如何过滤重复结果?
我的理解是,查询以类似于Cassandra的方式绕过集群。
数据复制不是Elasticsearch方面关注的问题。他们创建自己的表来创建搜索信息,并通过标准的Cassandra机制复制这些表。如果你了解Cassandra复制是如何工作的,那么Elasticsearch数据也可以做同样的事情。
进行过滤是因为每个搜索节点都有一个非重叠的令牌范围来处理。换句话说,一个节点被要求返回1,2,3的结果,结果的下一个节点为4,5,6,第三个节点的结果为7,8,9。因此不会有重叠和没有实际的过滤。
Elassandra根据目标索引的search_strategy_class
将查询分发到节点。有两种策略:PrimaryFirstSearchStrategy
(默认)和RandomSearchStrategy
。
每个节点都参与查询,并负责将其拥有的文档作为主节点返回。节点关闭时,下一个副本将用作替代。
当RF> 1时,只能通过一部分节点到达完整的环。随机搜索策略通过随机选择这样的节点子集来利用这一点来提高搜索效率。
两种策略都根据上述行为为每个子查询添加了token_range
过滤器。因此,过滤在本地发生,而不是在协调器节点中发生。