当前位置: 首页 > news >正文

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() 这条线走到底。 你很快就能把整个搜索链路串起来。🚀

http://www.jsqmd.com/news/1389990/

相关文章:

  • 复杂自演化网络的测地线控制论:基于 4D 协变时空流形与自适应阻抗矩阵的内生安全范式
  • MathorCup D题解析:多目标装箱优化算法与建模实战
  • 数学建模竞赛实战指南:从问题解析到论文呈现的完整思维框架
  • gti与Git的完美结合:Bash/Zsh自动补全配置指南
  • 前端岗位结构性调整:从技术演进到AI冲击下的生存指南
  • 5分钟上手国产开源OpenFOAM流体仿真软件APPFlow:从几何建模到后处理全流程实战指南
  • 鹰手营子矿网站建设:打造本地企业数字化名片与网络营销实战指南
  • Formality:时序变换(三)(相位反转)
  • Stork Oracle Auto Bot安全使用指南:规避风险与合规操作建议
  • Windows系统文件UiaManager.dll丢失找不到问题解决
  • They Live Adblocker高级技巧:自定义标语、调整样式和优化性能
  • WIN10系统下delphi7编译大点项目经常出错或不通过
  • Weakpass规则库详解:nsa64/top_1500等密码生成规则的应用场景
  • 【Linux系统】OS、进程PCB、状态、进程的切换和调度,虚拟地址空间
  • macOS文件隔离机制解析与xattr命令实战应用
  • linux下C++生成并使用静态库和静态库
  • LangGraph状态管理核心:Reducer原理、类型与并发实战
  • 如何建设个人网站从0到1:普通人也能做出的高颜值独立门户
  • 解决管网压降空压机选型要点与专业型号解析
  • PhotoGIMP完整上手教程:3步让免费GIMP变身Photoshop界面,每年省下上千订阅费
  • 杰理之无法修改PA 控制IO问题处理【篇】
  • 游戏逆向工程实战:从数据解析到MOD开发的技术探索
  • go-env源码解析:从EnvSet到ChangeSet的设计哲学
  • 2026年美工外包公司/平面设计包月公司横向对比来了:从服务与交付来看哪家值得推荐? - 企业综合对比网
  • 与deepseek-flsah 网页版的对话,比geminni强太多了:4个问题,带你简单了解,接口与抽象类的区别,多态的概念
  • 零基础微信逆向工程实战:3步搞定微信ipa获取、砸壳与头文件导出
  • 数学建模竞赛问题二进阶攻略:从模型深化到论文写作全解析
  • 2024年深耕本地生活圈,地方门户网站建设方案如何打造城市流量新引擎
  • 南京英文网站建设:如何让中国制造在世界舞台发出真实声音?
  • 响沙湾膜结构的施工技术难点与工程质量管控