【译】Lucene 查询语法
内容提要
Lucene 查询语法是一种功能丰富的查询语言,支持单词、短语和布尔操作符等多种查询形式。用户可以通过查询解析器输入文本,支持通配符、正则表达式和模糊搜索。查询时可指定域,使用加权提升相关性,并对特殊字符进行转义。
延伸解读
查询解析器 vs 查询 API:如何选择
文章强调查询解析器专为人类输入设计,而非程序生成。若以编程方式构建查询字符串再解析,可能引入分析器不匹配等问题。对于日期、关键字等结构化值,或来自下拉菜单的有限集合,建议直接使用查询 API 添加 TermQuery 子句,避免解析器误处理。这能提升查询准确性和性能。
域修饰符的作用范围与常见陷阱
域修饰符仅对紧随其后的词生效。例如 title:The Right Way 只对 title 域搜索 The,而 Right 和 Way 会使用默认域。若想对多个词指定同一域,需用括号分组,如 title:(The Right Way)。忽略此规则可能导致查询结果与预期不符。
模糊搜索与邻近搜索的实用细节
模糊搜索基于 Damerau-Levenshtein 编辑距离,默认允许 2 次编辑,可通过 ~ 后加 0-2 的数字调整。邻近搜索用 ~ 加数字指定词间最大距离,如 "jakarta apache"~10。注意通配符不能作为搜索词首字符,且模糊搜索的浮点数参数已弃用。
布尔操作符的优先级与 NOT 限制
AND、OR、NOT 等布尔操作符必须大写。OR 是默认连接符,AND 要求同时匹配,NOT 排除后续词,但 NOT 不能单独用于单个词,否则无结果。使用圆括号可明确逻辑分组,如 (jakarta OR apache) AND website,避免歧义。
Q&A
Lucene 查询语法的主要功能是什么?
Lucene 查询语法是一种功能丰富的查询语言,支持多种查询形式,包括单词、短语和布尔操作符等。
如何在Lucene中进行模糊搜索?
在Lucene中,模糊搜索通过在单个词的最后添加波浪符(~)来实现,例如:roam~。
Lucene支持哪些类型的查询词?
Lucene支持单个词和短语作为查询词,单个词如'test',短语则用双引号包围,如'hello dolly'。
如何使用布尔操作符组合查询?
可以使用AND、OR、NOT等布尔操作符组合多个词,例如:'jakarta AND apache'。
Lucene如何处理特殊字符?
Lucene支持对特殊字符进行转义,使用反斜杠()来转义,例如:\+表示加号。
如何在Lucene中进行范围搜索?
范围搜索使用方括号或花括号指定上下界,例如:mod_date:[20020101 TO 20030101]。