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

相关文章:

  • python 项目编号 2025821 有关于中英文数据的收集、处理
  • 数据结构之排序大全(3)
  • Python数据可视化利器:Matplotlib从入门到实战全解析
  • C ++代码学习笔记(一)
  • TDengine IDMP 运维指南(常见问题)
  • 日语学习-日语知识点小记-构建基础-JLPT-N3阶段(18):文法+单词第6回1
  • 虚幻基础:曲线
  • 基于STM32单片机的二维码识别物联网OneNet云仓库系统
  • 图--常见面试问题
  • 从源码中学习Java面向对象的多态
  • 多级缓存一致性矩阵:ABP vNext 下的旁路 / 写穿 / 写回组合实战
  • MiniGPT-4
  • FPGA 在情绪识别领域的护理应用(三)
  • 机器学习1
  • 结合 Flutter 和 Rust 的跨平台开发方案
  • Vibe Coding v.s Prompt Engineering
  • 数据库面试常见问题
  • gsplat在windows本地部署
  • Dockerfile
  • Claude Code 已支持【团队版】和【企业版】订阅
  • Webpack的使用
  • 15. 多线程(进阶2) --- CAS 和 多线程常用的类
  • Mokker AI:一键更换照片背景的AI神器
  • 粗粮厂的基于flink的汽车实时数仓解决方案
  • selenium一些进阶方法如何使用
  • K8s快速上手-微服务篇
  • 机器学习中的聚类与集成算法:从基础到应用
  • 前端视频流处理从 0 到 “能跑”:可复制 Demo+WebGL/Worker 优化,覆盖会议 / 直播 / 监控场景
  • 【尝试】在macOS上安装cvat
  • 【51单片机】【protues仿真】基于51单片机水位监测系统