搜索|图解 ElasticSearch 原理,你可收好了!( 三 )


节点分配与 Shard 优化:
为更重要的数据索引节点,分配性能更好的机器。
确保每个 Shard 都有副本信息 Replica。
搜索|图解 ElasticSearch 原理,你可收好了!
文章插图
路由 Routing:每个节点,每个都存留一份路由表,所以当请求到任何一个节点时,ElasticSearch 都有能力将请求转发到期望节点的 Shard 进一步处理。
搜索|图解 ElasticSearch 原理,你可收好了!
文章插图
# 一个真实的请求
如下图:
搜索|图解 ElasticSearch 原理,你可收好了!
文章插图
Query
如下图:
搜索|图解 ElasticSearch 原理,你可收好了!
文章插图
Query 有一个类型 filtered,以及一个 multi_match 的查询。
Aggregation
如下图:
搜索|图解 ElasticSearch 原理,你可收好了!
文章插图
根据作者进行聚合,得到 top10 的 hits 的 top10 作者的信息。
请求分发
这个请求可能被分发到集群里的任意一个节点,如下图:
搜索|图解 ElasticSearch 原理,你可收好了!
文章插图
上帝节点
如下图:
搜索|图解 ElasticSearch 原理,你可收好了!
文章插图
这时这个节点就成为当前请求的协调者(Coordinator),它决定:
根据索引信息,判断请求会被路由到哪个核心节点。
以及哪个副本是可用的。
等等。
路由
如下图:
搜索|图解 ElasticSearch 原理,你可收好了!
文章插图
在真实搜索之前
ElasticSearch 会将 Query 转换成 Lucene Query,如下图:
搜索|图解 ElasticSearch 原理,你可收好了!
文章插图
然后在所有的 Segment 中执行计算,如下图:
搜索|图解 ElasticSearch 原理,你可收好了!
文章插图
对于 Filter 条件本身也会有缓存,如下图:
搜索|图解 ElasticSearch 原理,你可收好了!
文章插图
但 Queries 不会被缓存,所以如果相同的 Query 重复执行,应用程序自己需要做缓存。
搜索|图解 ElasticSearch 原理,你可收好了!
文章插图
所以:
Filters 可以在任何时候使用。
Query 只有在需要 Score 的时候才使用。
返回
搜索结束之后,结果会沿着下行的路径向上逐层返回,如下图:
搜索|图解 ElasticSearch 原理,你可收好了!
文章插图
搜索|图解 ElasticSearch 原理,你可收好了!
文章插图
搜索|图解 ElasticSearch 原理,你可收好了!
文章插图
搜索|图解 ElasticSearch 原理,你可收好了!
文章插图
搜索|图解 ElasticSearch 原理,你可收好了!
文章插图