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

相关文章:

  • U盘直接拔出不在电脑上弹出有何影响
  • 张量拼接操作
  • 文件上传漏洞2-常规厂商检测限制绕过原理讲解
  • 【学习笔记】Nginx常用安全配置
  • 新型深度神经网络架构:ENet模型
  • 零基础搭建监控系统:Grafana+InfluxDB 保姆级教程,5分钟可视化服务器性能!​
  • 《通信原理》学习笔记——第一章
  • PID控制算法理论学习基础——单级PID控制
  • houdini vat 学习笔记
  • LangChain 代理(Agents)学习
  • 《Java Web程序设计》实验报告五 Java Script学习汇报
  • dubbo源码学习3-dubbo反射调用服务源码分析
  • Leetcode百题斩-二分搜索
  • 【Linux仓库】虚拟地址空间【进程·陆】
  • 【学习笔记】Linux命令
  • AI:机器人未来的形态是什么?
  • 咨询导览,AI发展趋势
  • Leet code 每日一题
  • 【设计模式】外观模式(门面模式)
  • 飞算 JavaAI 智能编程助手:颠覆编程旧模式,重构新生态
  • ubuntu18.04 升级Ubuntu 20.04
  • vue3 el-table动态表头
  • Vue 项目打包部署还存在问题?你知道怎么做吧?
  • React - css 模块化(modules)
  • 解决‘vue‘ 不是内部或外部命令,也不是可运行的程序
  • 智慧公安总体建设方案PPT(78页)
  • 江协科技STM32入门教程——通信接口
  • 《Java Web程序设计》实验报告四 Java Script前端应用和表单验证
  • Vue.js:从 Web 到桌面的跨端实践与技术选型指南
  • C++11的整理笔记