我目前正在调整搜索API的弹性搜索。规范是:
当我使用Jmeter使用Nginx对其进行测试时,它的吞吐量约为~220 req / s,但是当我指定?preference=_local
时,它可以达到~320 req / s。这是非常好的性能改进。我想问的是:
?preference=_local
实际做了什么以及它如何改善查询的效果??preference=_local
?查询:
{
"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
}
答案 0 :(得分:1)
在这种情况下使用_local
首选项很好,因为索引有两个节点和一个副本,这意味着每个节点都有完全相同的数据。
首选项_local
将运行您要发送到节点的查询,在该特定节点的数据上。如果该节点没有需要查询的数据,也会将请求发送到其他节点。
此外,在查询Elasticsearch集群时,您需要通过客户端节点或负载均衡器发送搜索请求,或者您的代码需要以BOTH节点为目标。基本上,您希望所有节点都执行" gatherer"工作。这很重要,因为接收搜索请求的节点是唯一从所有其他节点收集结果,执行最终搜索和聚合并将结果发送回用户的节点。因此,获取请求的节点是那个做更多工作的节点。
在具有首选项_local
的双节点方案中,查询负载平衡更为重要,因为获取请求的节点始终将执行所有工作,另一个节点将处于空闲状态。