news 2026/8/14 6:24:18

es search包

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
es search包

好问题!有了 index 包的底子,看 search 包会顺畅很多。

---

search 包的入口:SearchService

跟 index 包一样,SearchService 是 search 包的"门面",所有搜索请求都会先经过它。

```java

// 搜索服务,每个节点都有一个

public class SearchService {

// 执行搜索

public SearchPhaseResult executeQueryPhase(...)

// 执行获取(取回 _source)

public SearchPhaseResult executeFetchPhase(...)

// 执行聚合

public SearchPhaseResult executeAggregationPhase(...)

}

```

从 SearchService 开始,你会看到这个流程:

```

SearchService.executeQueryPhase()

创建 Context(搜索上下文)

IndexSearcher(Lucene 搜索器)

Query 构建

执行搜索

返回结果

```

---

主线路径(跟着一个搜索请求走)

```

【协调节点】

TransportSearchAction

↓ 广播到所有分片

【数据节点】

SearchService.executeQueryPhase()

↓ 创建搜索上下文

SearchContext

↓ 构建 Lucene Query

QueryBuilder → Lucene Query

↓ 执行搜索

IndexSearcher.search(query)

↓ 返回结果

SearchPhaseResult

↓ 返回给协调节点

【协调节点】

SearchPhaseController.merge()

↓ 合并排序/分页/聚合

返回给用户

```

---

核心类一览

1. SearchService(入口门面)

每个节点上的搜索服务,所有搜索请求的入口。

2. SearchContext(搜索上下文)

一次搜索的上下文,包含查询、排序、聚合等所有信息。

3. QueryPhase(查询阶段)

执行 Lucene 搜索,返回文档 ID + 评分。

4. FetchPhase(取回阶段)

根据文档 ID,去 Lucene 取回 _source 等字段。

5. AggregationPhase(聚合阶段)

执行桶聚合、指标聚合等。

6. SearchPhaseController(协调控制器)

协调节点上,负责合并所有分片的结果。

---

建议的阅读顺序

```

第 1 步:SearchService

→ 找 executeQueryPhase 方法

→ 看它怎么创建 SearchContext

第 2 步:SearchContext

→ 看它里面装了什么(Query、Sort、Aggregations)

第 3 步:QueryPhase

→ 看它怎么把 QueryBuilder 转成 Lucene Query

→ 看它怎么调用 IndexSearcher.search()

第 4 步:FetchPhase

→ 看它怎么根据文档 ID 取回 _source

第 5 步:SearchPhaseController

→ 看它怎么合并多个分片的结果

```

---

一个具体的代码追踪路线

```java

// 1. SearchService 入口

public SearchPhaseResult executeQueryPhase(SearchShardRequest request) {

// 创建搜索上下文

SearchContext context = createContext(request);

// 执行查询

return queryPhase.execute(context);

}

// 2. QueryPhase

public SearchPhaseResult execute(SearchContext context) {

// 构建 Lucene Query

Query luceneQuery = context.query().toQuery(context);

// 执行搜索

IndexSearcher searcher = context.searcher();

TopDocs topDocs = searcher.search(luceneQuery, context.size());

// 返回结果

return new SearchPhaseResult(topDocs);

}

// 3. SearchPhaseController(协调节点)

public void merge(List<SearchPhaseResult> results) {

// 合并所有分片的结果

// 排序、分页、聚合

for (SearchPhaseResult result : results) {

merged.add(result);

}

return merged.sort().paginate();

}

```

---

为什么先看 index 包再看 search 包会更顺?

index 包 search 包

你知道 Lucene 怎么写 你看 Lucene 怎么读

你知道 IndexWriter 是什么 你知道 IndexSearcher 是什么

你知道 Document 是什么 你知道 TopDocs 是什么

你知道 Segment 是什么 你知道 Term 查询怎么工作

search 包的 QueryPhase 本质上就是在:

1. 把用户查询转成 Lucene Query

2. 调用 IndexSearcher.search()

3. 把 Lucene TopDocs 包装成 ES 结果

你看过 Lucene,这个过程你早就懂了!只是看 ES 怎么封装而已。

---

总结

问题 答案

从哪里开始? SearchService

核心类有哪些? SearchService, SearchContext, QueryPhase, FetchPhase, SearchPhaseController

主线路径? SearchService → SearchContext → IndexSearcher → 返回 → 合并

和 index 包的关系? 读依赖于写,所以先看 index 包

你的优势在哪? 懂 Lucene,知道 IndexSearcher 怎么工作

一句话:从 SearchService 开始,顺着 SearchService.executeQueryPhase() → QueryPhase → IndexSearcher.search() 这条线走到底。 你很快就能把整个搜索链路串起来。🚀

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/14 6:24:03

东营网站建设天锐科技为何成为当地企业数字化转型的首选服务商

在这个互联网渗透率已经高达百分之七十以上的时代,很多老板尤其是咱们东营本地的实业老板,心里可能都在打鼓:我这实体生意做得好好的,工厂里机器轰鸣,仓库里货品积压,怎么非得去搞什么“网站”、“APP”或者“小程序”呢?是不是就是花个几万块钱,买个域名,挂个页面,让…

作者头像 李华
网站建设 2026/8/14 6:21:37

为什么在昆明做网站选择昆明光硕是更靠谱的决定以及昆明网站建设的核心价值

在这个数字化浪潮席卷全球的今天,任何一家想要在当地扎根、甚至走出云南、走向全国的中小企业,都意识到了一个朴素的真理:没有网站,就像是在商业的荒漠中迷路。尤其是对于身处春城昆明的企业主来说,虽然这里有着得天独厚的旅游资源和深厚的历史文化底蕴,但商业竞争的激烈…

作者头像 李华
网站建设 2026/8/14 6:21:34

如何建设个人网站从0到1:普通人也能做出的高颜值独立门户

在这个信息爆炸的时代,我们每个人都像是一个在洪流中挣扎的孤岛。每天刷着短视频,看着社交媒体上精心修饰过的生活,心里难免会产生一种深深的无力感:我的声音,真的被听到了吗?我的思考,真的有价值吗?很多人问我:“为什么我要折腾一个自己的网站?朋友圈不能发吗?知乎…

作者头像 李华
网站建设 2026/8/14 6:21:34

2024年深耕本地生活圈,地方门户网站建设方案如何打造城市流量新引擎

在这个互联网渗透率已经接近天花板、流量红利见顶的时代,很多老板和创业者都在问一个问题:传统的地方门户网站还有救吗?还能不能做?还能不能赚钱?我的回答很直接:能,但是玩法彻底变了。如果你还在想着靠堆砌新闻内容、靠简单的分类信息广告来赚钱,那趁早停手,那套逻辑…

作者头像 李华
网站建设 2026/8/14 6:21:19

深入了解承德市住房和城乡建设局网站:查询政策指南与服务指南一站式平台

承德市住房和城乡建设局网站在这个数字化浪潮席卷而来的时代,信息的获取变得前所未有的便捷,但随之而来的也是信息的碎片化和噪音的增加。对于广大居民、房地产从业者以及城市规划爱好者来说,想要获取准确、权威且及时的房地产政策、建筑规范以及民生服务指南,往往需要花费…

作者头像 李华