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.pswp.cn/bicheng/94179.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/94179.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/94179.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

base64认识实际使用

Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。 Base64,就是包括小写字母a-z、大写字母A-Z、数字0-9、符号"“、”/"一共64个字符的字符集,(任何…

LX8201微孔雾化驱动芯片应用笔记一DC5V供电

前言LX8201是深圳市乐⽽信科技服务有限公司最新⾃研的⼀款微孔雾化⽚专⽤驱动芯⽚,结合标准外围电路,能有效驱动控制市⾯上各种微孔雾化⽚,基于独特的电路设计和软件算法,其在功耗以及成本上均具有明显的优势。本应用笔记将帮助用…

MySQL索引优化之索引条件字段类型不同

在sql的联表查询中,on后面相等的两个字段如果字段类型不一致,尽管它们都加了索引,最终查询的时候也不会走索引,这是因为会触发隐式类型转换导致索引失效。 例如 Select * from Orders o left join User u on o.user_id u.id; 假如…

【Linux】信号(二):Linux原生线程库相关接口

【Linux】信号的控制使用一.线程的创建pthread_create()接口二.线程等待1.为什么要线程等待?2.pthread_join()三.线程中止1.return2.pthread_exit五.线程应用C自带多线程在上次的博客中主要讲解了什么是线程 这次的博客主要是带大家把线程的相关接口简单的使用一下 …

小程序被爬虫攻击,使用waf能防护吗?

在移动互联网时代,小程序以轻量化、高便捷性成为流量入口新宠,但也因此成为爬虫攻击的重灾区。从电商平台的价格数据爬取到内容平台的版权盗用,爬虫攻击不仅消耗服务器资源,更可能导致商业机密泄露与用户权益受损。面对这类威胁&a…

通过自动化本地计算磁盘与块存储卷加密保护数据安全

作为打造开发者首选云平台使命的一部分,我们持续推出免费的智能化功能与产品来加强云资源安全。最新推出的本地磁盘加密功能是我们正在所有核心计算区域逐步部署的最新计算特性。当您在首选区域启用本地磁盘加密功能后,新部署的计算实例将默认自动启用数…

中文房间悖论:人工智能理解力的哲学拷问

本文由「大千AI助手」原创发布,专注用真话讲AI,回归技术本质。拒绝神话或妖魔化。搜索「大千AI助手」关注我,一起撕掉过度包装,学习真实的AI技术!1 思想实验阐述中文房间(Chinese Room)思想实验…

mac如何运行windows程序?性能党vs便捷党选择指南

macOS的流畅稳定虽让人青睐,但系统的不兼容性是个大问题。有的用户想要使用某个专业程序,发现只有Windows版本,然而没法直接在mac上运行,非常懊恼!mac如何运行windows程序?本文将提供多个可行的方法&#x…

设置电机数据(闭环驱动器C5-E) ——易格斯igus

4.3 设置电机数据 在调试之前,电机控制器需要电机数据表中的一些值。 ■ 极对数:对象 2030h:00h(极对数) 电机极对数应在此处输入。对于步进电机,极对数使用步距角计算,例如,1.8 …

药品追溯码(溯源码)采集系统(二):门诊发药后端

门诊发退药追溯码采集系统解析:一、门诊发退药追溯码数据表1.1、Wm_ware_dispense_bill表:该表用于存储处方信息1.2 Wm_ware_dispense_tracecode:追溯码采集表二、发退药后端代码后端代码基于Springboot架构和mybatis-plus,先看主要接口信息&…

Unity编辑器相关

前言继承EditorWindow。 GUILayout类与EditorGUILayout类的应用区别&#xff1a;//TODO创建窗口的方法1&#xff09;GetWindow<T>() 已开则聚焦、未开则创建。无需再手动调用 Show()。GetWindow<T>() 提供多个重载。2&#xff09;CreateInstance<T>()始终创建…

ES支持哪些数据类型,和MySQL之间的映射关系是怎么样的?

Elasticsearch&#xff08;简称 ES&#xff09;是一个分布式搜索和分析引擎&#xff0c;支持丰富的数据类型来适应不同场景。MySQL 是一个关系型数据库&#xff0c;两者在数据类型上存在差异&#xff0c;但可以通过映射实现数据同步或集成。下面我将逐步解释 ES 支持的数据类型…

8.21IPSEC安全基础后篇,IKE工作过程

一、数据存储完整性校验数据存储完整性校验需通过加密密钥实现。数据存储前还需通过身份认证&#xff0c;该过程同样依赖密钥完成。二、对称key的产生、传递、管理VPN中需使用多组对称密钥&#xff1a;数据加解密需独立密钥数据完整性校验需独立密钥身份认证需独立密钥不同功能…

网络连接的核心机制

一、网络连接全流程拆解&#xff08;含7大步骤动态交互&#xff09; 1. 用户输入网址&#xff1a;从域名到IP的跨越 操作触发&#xff1a;用户在浏览器输入 www.example.com&#xff0c;触发 DNS域名解析。核心协议&#xff1a;DNS&#xff08;基于UDP/TCP&#xff09;。硬件设…

小程序个人信息安全检测技术:从监管视角看加密与传输合规

1. 前言 在监管通报中&#xff0c;小程序因“未采取加密、去标识化等安全技术措施”被处罚的案例屡见不鲜。很多开发者疑惑&#xff1a;明明用了HTTPS&#xff0c;为什么还会被判定“未加密”&#xff1f;监管机构是如何通过技术手段发现这些问题的&#xff1f;本文将从技术原…

ansible playbook 实战案例roles | 实现db2自动安装

文章目录一、核心功能描述二、roles内容2.1 文件结构2.2 主配置文件2.3 tasks文件内容三、files文件内容四、vars文件内容免费个人运维知识库&#xff0c;欢迎您的订阅&#xff1a;literator_ray.flowus.cn 一、核心功能描述 这个 Ansible Role 的核心功能是&#xff1a;​自动…

webrtc中win端音频---windows Core Audio

一、Core Audio 系统内核框架 图中显示的是渲染的音频数据如何从大多数应用程序流向扬声器的简化表示。对于采集来说,音频数据的路径是完全相同,但流向是相反的。从图中可以看到,一些高阶API(例如MME,DirectSound等),对 Core Audio APIs 进行了封装,使用这些API能够更容…

【数据可视化-96】使用 Pyecharts 绘制主题河流图(ThemeRiver):步骤与数据组织形式

&#x1f9d1; 博主简介&#xff1a;曾任某智慧城市类企业算法总监&#xff0c;目前在美国市场的物流公司从事高级算法工程师一职&#xff0c;深耕人工智能领域&#xff0c;精通python数据挖掘、可视化、机器学习等&#xff0c;发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…

【Android】Activity 如何进行数据传输

三三要成为安卓糕手 一&#xff1a;Activity之间的数据传输 问题&#xff1a;不同的Activity之间怎么进行数据传输呢? 比如第一个页面中有一些字符串数据之类的要通过数据传输&#xff0c;传递给第二个页面进行显示的 1&#xff1a;MainActivity做处理 在定义一个按钮&#xf…

C#语言的语法(数据类型)

数据类型 表2.1给出了C#的主要数据类型。注意&#xff0c;基本类型的长度与计算机或操作系统的类型无关。C# 中的字符是16位的宽度&#xff0c;可以表示非拉丁语言中的所有字符。它使用一种叫双字节码的字符编码 系统&#xff0c;其中定义了绝大多数可书写语言的数以千计的字符…