我们可以确保本地调用elasticsearch吗?

时间:2016-06-24 04:44:49

标签: search elasticsearch lucene information-retrieval

假设我有一个服务,并且在多个主机上运行elasticsearch。如果我确保每个主机包含完整的弹性搜索索引(通过具有副本> = numberOfHosts-1),是否可以确保特定主机上的服务调用仅搜索同一主机的索引(即没有弹性搜索呼叫是跨主机进行的)?

1 个答案:

答案 0 :(得分:1)

使用shard allocation filtering,您可以确保索引的分片仅驻留在单个主机上。但请注意,通过这样做,如果主机出现故障,您将丢失数据。

PUT test/_settings
{
  "index.routing.allocation.include._ip": "192.168.1.1",
  "index.routing.allocation.exclude._ip": "192.168.1.2,192.168.1.3"
}

因此,如果您直接在test查询192.168.1.1索引,则可以确定192.168.1.1与节点之间不会有任何聊天来完成您的请求。

如果您将查询发送到客户端节点或其他类型的负载均衡器节点,则保证您的请求直接路由到192.168.1.1,因为群集将知道test索引仅是在该主机上可用。

在单个主机上本地化索引并不是一个好习惯,就好像主机出现故障或损坏一样,您可以保证丢失数据。