当前位置: 首页 > 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.xdnf.cn/news/1107793.html

相关文章:

  • RabbitMQ面试精讲 Day 1:RabbitMQ核心概念与架构设计
  • PostgreSQL HOT (Heap Only Tuple) 更新机制详解
  • [es自动化更新] Updatecli编排配置.yaml | dockerfilePath值文件.yml
  • AI之DL之VisualizationTool:ai-by-hand-excel的简介、安装和使用方法、案例应用之详细攻略
  • Redis过期策略与内存淘汰机制面试笔记
  • [es自动化更新] 策略体系 | 策略源(容器镜像)
  • Java中的方法传参机制
  • 【B题成品论文】2025APMCM亚太杯中文赛B题成品论文(无偿分享)
  • Java 大视界:基于 Java 的大数据可视化在智慧城市能源消耗动态监测与优化决策中的应用(2025 实战全景)
  • 舒尔特方格训练小游戏流量主微信小程序开源
  • 数据分析库 Pandas
  • SQL新手入门详细教程和应用实例
  • 【MediaSoup】MS_DUMP打印转换为PLOGI的形式
  • 13. https 是绝对安全的吗
  • 二叉树算法进阶
  • Redis渗透思路总结
  • 第七章应用题
  • JVM--虚拟线程
  • Spring Boot 中使用 Lombok 进行依赖注入的示例
  • RMSNorm实现
  • linux----------------------线程同步与互斥(上)
  • linux_线程概念
  • 基于开源AI智能名片链动2+1模式S2B2C商城小程序的营销直播质量提升策略研究
  • Vue框架之钩子函数详解
  • 2025年亚太杯(中文赛项)数学建模B题【疾病的预测与大数据分析】原创论文分享
  • [爬虫实战] 多进程/多线程/协程-异步爬取豆瓣Top250
  • QML与C++相互调用函数并获得返回值
  • PID控制算法理论学习基础——单级PID控制
  • 多 Agent 强化学习实践指南(一):CTDE PPO 在合作捕食者-猎物游戏中的应用详解
  • GitHub 操作指南:项目协作与自动化工作流实践