在elasticsearch中使用首选项_local

时间:2017-05-22 09:56:00

标签: elasticsearch nginx

我目前正在调整搜索API的弹性搜索。规范是:

  • 2个节点单个群集,在VM上具有单个索引(2核2GB RAM)
  • 5分片
  • 1复制
  • 使用nginx进行负载均衡

当我使用Jmeter使用Nginx对其进行测试时,它的吞吐量约为~220 req / s,但是当我指定?preference=_local时,它可以达到~320 req / s。这是非常好的性能改进。我想问的是:

  1. ?preference=_local实际做了什么以及它如何改善查询的效果?
  2. 使用?preference=_local
  3. 的权衡是什么?

    查询:

    {
    "query": {
        "multi_match": {
            "query": "trump",
            "type": "most_fields",
            "operator": "and",
            "fields": ["title", "content"]
        }
    },
    "sort": {
        "published_at": {
            "order": "desc"
        },
        "_score": {
            "order": "desc"
        }
    },
    "from": 0,
    "size": 20,
    "min_score": 1
    }
    

1 个答案:

答案 0 :(得分:1)

在这种情况下使用_local首选项很好,因为索引有两个节点和一个副本,这意味着每个节点都有完全相同的数据。

首选项_local将运行您要发送到节点的查询,在该特定节点的数据上。如果该节点没有需要查询的数据,也会将请求发送到其他节点。

此外,在查询Elasticsearch集群时,您需要通过客户端节点或负载均衡器发送搜索请求,或者您的代码需要以BOTH节点为目标。基本上,您希望所有节点都执行" gatherer"工作。这很重要,因为接收搜索请求的节点是唯一从所有其他节点收集结果,执行最终搜索和聚合并将结果发送回用户的节点。因此,获取请求的节点是那个做更多工作的节点。

在具有首选项_local的双节点方案中,查询负载平衡更为重要,因为获取请求的节点始终将执行所有工作,另一个节点将处于空闲状态。