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

【Lucene/Elasticsearch】**Query Rewrite** 机制

这段话描述的是 Lucene/Elasticsearch 的 **Query Rewrite** 机制,核心一句话:

> **把“高级”或“逻辑”查询(如 PrefixQuery、WildcardQuery、RangeQuery)在真正执行前,拆成最底层的、可直接倒排索引查的“原子查询”(TermQuery、PointRangeQuery 等)。**

---

### 为什么要重写?

1. **高级查询本身无法直接走索引**  
例:`PrefixQuery("titl", "jav")` 并不知道前缀 `jav*` 到底对应哪些词项,需要先把索引里所有以 `jav` 开头的真实 term 找出来。

2. **拆成原子查询后可走优化路径**  
- 倒排列表直接求并集/交集  
- 可利用跳表、压缩、缓存  
- 可以合并相邻 TermQuery 为更高效的 BooleanQuery

---

### 举个完整流程

```text
用户写的查询            →   重写后的查询
------------------------------------------------
PrefixQuery("title", "jav")   →   BooleanQuery
├── TermQuery("java")
├── TermQuery("javascript")
└── TermQuery("javaw")
```

- 重写由 `Query.rewrite(IndexReader)` 触发,发生在 **搜索执行早期**(QueryPhase 之前)。  
- 对上层透明:用户看到的仍是原查询,内部已变成“可执行的原子查询”。

---

### Elasticsearch 中的体现

- 在 Profile API 里能看到 `rewrite_time` 指标。  
- 复杂查询(wildcard、range、geo、script)都会经历这一步;重写结果会影响后续缓存键、性能分析。

http://www.dtcms.com/a/276350.html

相关文章:

  • day68—DFS—二叉树的所有路径(LeetCode-257)
  • 微信小程序form组件的使用
  • 从json中提取i18n字段
  • nodej获取当前系统的cpu架构信息
  • 程序员软技能之推广营销-04-长尾效应(Long Tail Effect)
  • UnityShader——SSAO
  • C++类模版1
  • Linux进程的生命周期:状态定义、转换与特殊场景
  • 【Elasticsearch】检索模板(Search Template)
  • 从输入到路径:AI赋能的地图语义解析与可视化探索之旅(2025空间智能全景)
  • C++ Boost 自动链接机制详解
  • Java基础:泛型
  • 单调栈单调队列【算法进阶】
  • 11. JVM中的分代回收
  • 数据结构自学Day6 栈与队列
  • BaseDao 通用查询方法设计与实现
  • 快速过一遍Python基础语法
  • 015---全面理解交易:区块链状态转移的原子单位与链上执行全流程图解
  • 【AI News | 20250711】每日AI进展
  • APP Inventor使用指南
  • LeetCode 3169.无需开会的工作日:排序+一次遍历——不需要正难则反,因为正着根本不难
  • 【使用Pyqt designer时pyside2安装失败】
  • 如何彻底禁用 Chrome 自动更新
  • C++实现二叉树左右子树交换算法
  • vuecil3+版本下,兼容ie等不支持es6的低版本浏览器
  • 内容总监的效率革命:用Premiere Pro AI,实现视频画幅“一键重构”
  • 四、深度学习——CNN
  • 快速上手UniApp(适用于有Vue3基础的)
  • 服务器ssh连接防护指南
  • 软件测试基础1-软件测试需求分析