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

【lucene】lucene常用查询一览

Lucene 里除了常见的 **TermQuery / BooleanQuery / PhraseQuery / FuzzyQuery / SpanNearQuery** 之外,还有不少“特殊家族”。下面按“族”归纳,一眼就能知道它们各自解决什么问题、跟普通倒排检索的差别在哪。

──────────────────  
1. **Span 族(位置级)**  
已在上面讲过 SpanNearQuery,再补两个常用成员:  
- `SpanOrQuery`  —— 多个 SpanQuery 取并集(位置层面 OR)。  
- `SpanNotQuery` —— 先匹配 include,再剔除与 exclude 重叠的位置。  
- `SpanContainingQuery`、`SpanWithinQuery`(sandbox)—— 判断一个 span 是否包含 / 位于另一个 span 内。

2. **Point 族(数值/多维数值)**  
基于 BKD 树,不是倒排表。  
- `PointRangeQuery`(Int/Long/Float/DoubleRange)  
- `LatLonPoint.newDistanceQuery` / `newBoxQuery`(地理距离、矩形)  
- `XYPoint.newBoxQuery`(二维笛卡尔坐标)

3. **DocValues 族(列存)**  
直接扫列存,用于排序、聚合、过滤,不做倒排:  
- `SortedSetSortField`、`LongDocValuesField.newRangeQuery`  
- `DocValuesFieldExistsQuery`(过滤某列非空)

4. **Join 族(跨文档/跨字段 join)**  
- `TermsQuery` (“大 ID 列表”查询,用于 filter cache)  
- `ParentChildrenBlockJoinQuery` (嵌套文档父子关系)  
- `ScoreMode.Avg/Total` 控制如何把子文档分数合并到父文档

5. **Vector 族(向量检索)**  
基于 HNSW 图:  
- `KnnVectorQuery`(TopK 近似最近邻)  
- `FloatVectorSimilarityQuery`(显式指定相似度函数)

6. **Intervals 族(Lucene 8+ 新短语引擎)**  
官方定位是“SpanQuery 的继任者”,语法更直观:  
- `Intervals.phrase(...)`  
- `Intervals.unordered()` / `ordered()` / `maxgaps(n)`  
- `Intervals.notContain()` / `before()` / `after()`

7. **FunctionScore / Feature 族(评分公式可编程)**  
- `FunctionScoreQuery`(把任意查询包起来,再用脚本函数改分)  
- `FeatureField.newSaturationQuery`(用 BM25 + 饱和度特征)

8. **Script 族(脚本查询)**  
- `ScriptScoreQuery`(完全由脚本决定文档是否命中、得多少分)  
- `MatchAllDocsQuery` 的脚本版本:`_score = doc['price'].value * 0.7`

9. **Wildcard / Prefix / Regexp 族(通配正则)**  
底层都是 **AutomatonQuery**(用 DFA 和 FST 交集):  
- `WildcardQuery`  —— 通配符 `te?t`  
- `PrefixQuery`   —— 前缀 `abc*`  
- `RegexpQuery`   —— 正则 `ab+c.*`

10. **DisjunctionMaxQuery 族(取 max 而不是 sum)**  
常用于“多字段同义搜索”,只取子句最高分,避免简单叠加导致的暴涨。

──────────────────  
速查表

| 家族 | 数据结构 | 典型场景 | 是否走倒排 |
|---|---|---|---|
| Span | positions | 短语/邻近 | 是(positions) |
| Point | BKD 树 | 数值范围、地理 | 否 |
| DocValues | 列存 | 排序、聚合、存在性 | 否 |
| Join | 倒排 + 块结构 | 父子/嵌套 | 是 |
| Vector | HNSW | 向量检索 | 否 |
| Intervals | positions | 新短语 API | 是 |
| FunctionScore | 包装任意 Query | 自定义评分 | 取决于被包查询 |
| Script | 脚本引擎 | 任意规则 | 通常绕开倒排 |
| Automaton | FST+DFA 交集 | 通配/正则/模糊 | 是 |

把这 10 张“王牌”记住,基本能覆盖 Lucene 里 90% 的特殊查询场景。

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

相关文章:

  • 一键去除 Windows 图标角标(小箭头、盾牌与双箭头)
  • JeeSite V5.13.0 发布,升级 Spring Boot 3.5,Cloud 2025,AI 1.0,Vite 7
  • ORACLE中如何批量重置序列
  • 如何保证数据库和缓存的一致性?
  • 强化学习中的重要性采样:跨分布复用样本的核心技术
  • 大模型0基础开发入门与实践:第8章 “大力出奇迹”的哲学:大语言模型的核心技术揭秘
  • 【世纪龙科技】汽车专业虚拟仿真实训基地建设方案
  • 嵌入式软件典型架构:层次化模式 vs 递归模式
  • Java Main无法初始化主类的原因与解决方法(VsCode工具)
  • 【Java后端】Spring Boot 实现请求设备来源统计与UA解析全攻略
  • 智慧工厂的 “隐形大脑”:边缘计算网关凭什么重构设备连接新逻辑?
  • 编程刷题-资料分发1 图论/DFS
  • Kotlin-基础语法练习二
  • Android面试指南(四)
  • [新启航]机械深孔加工质控:新启航方案用激光频率梳破解 130mm 深度遮挡瓶颈
  • 闲聊汽车芯片的信息安全需求和功能
  • C# NX二次开发:反向控件和组控件详解
  • 智慧巡检新标杆:智能移动机器人——电力行业的守护者
  • 【数据结构】树与二叉树:结构、性质与存储
  • 解码欧洲宠物经济蓝海:跨境电商突围的战略逻辑与运营范式
  • Vue2+Vue3前端开发_Day5
  • 【PZ-A735T-KFB】璞致fpga开发板 Artix-7 系列之PA-Starlite-初学入门首选 开发板用户手册
  • 《Python 整数列表分类:巧妙将负数移到正数前面》
  • 力扣hot100:无重复字符的最长子串,找到字符串中所有字母异位词(滑动窗口算法讲解)(3,438)
  • LeetCode每日一题,2025-08-21
  • C++——C++重点知识点复习2(详细复习模板,继承)
  • 2.Shell脚本修炼手册---创建第一个 Shell 脚本
  • C++ string类(reserve , resize , insert , erase)
  • 鸿蒙中网络诊断:Network分析
  • 深入理解JVM内存结构:从字节码执行到垃圾回收的全景解析