Lucene查询语法
-
版本:8.7
-
通过JavaCC生成的查询分析器
-
提供了原生通过API生成查询的方式和通过解析查询字符串生成查询的方式
-
不要用代码生成查询字符串,然后通过查询分析器来分析
Terms-词语
- 一个查询语句被切分为词语和操作符。词语分为两类:单个词和短语
- 单个词:test、hello
- 短语:被双引号围绕的一组词,如:"hello dolly"
- 多个词可以通过Boolean操作符组合成一个更复杂的查询
Fields-字段
- Lucene中数据都是封装到字段里面的,执行查询的时候,可以指定查询的字段,或者查询默认字段
- 用冒号分割字段和查询的词,比如存在两个字段,title和text,text是默认字段。 text可以省略
- title:"The Right Way" AND text:go = title:"The Right Way" AND go
- title:The Right Way = title:The AND text:Right AND text:Way
Term Modifiers-词语修饰符
- Lucene 支持提供查询选项修饰查询词语
Wildcard Searches-通配符查询
- 单个字符?
- 多个字符*
- 短语不支持通配符
- 通配符不能用在首字符
Regular Expression Searches-正则表达式查询
- 正则写在正斜杠中间,如:/[mb]oat/
- 正则支持的语法
- 注意修改对应【正则支持的语法】链接的版本
Fuzzy Searches-模糊查询
- 使用符号写在词语最后,如roam,能查询foam或者roams
- 支持参数指定允许的最大编辑数,值在0-2之间,如roam~1
- 没有参数默认是2
- 之前版本小数也支持,5.0会移除
Proximity Searches-临近查询
- Lucene支持在特定距离内查找单词。要进行邻近查询,在短语末尾使用波浪号“~”符号。
- 要在文档中搜索10个单词以内的“apache”和“jakarta”,"jakarta apache"~10
Range Searches-范围查询
-
语法:字段:[startValue TO endValue]
-
mod_date:[20020101 TO 20030101]
-
不仅只能用在日期字段
-
方括号包含,大括号不包含
Boosting a Term-增加相关度
- 使用 ^
- 比如词语 jakarta^4 apache
- 比如短语 "jakarta apache"^4 "Apache Lucene"
- 相关度默认1,不能为负,可以为小数jakarta apache^0.2
Boolean Operators-布尔操作符
- 操作符必须全大写
- 支持操作符
- OR,||
- AND,&&
- "+",
- NOT "-"
OR
-
匹配其中一个
-
默认的连接操作符
-
a b = a OR b = a || b
AND
- 必须都匹配
- a b = a AND b = a && b
+
- +jakarta lucene
- 必须匹配jakarta,可能匹配lucene
NOT -
- "jakarta apache" NOT "Apache Lucene"
- 包含前者,不包含后者
- 不能单用,不然查不到
Grouping-分组
- 使用小括号
- (jakarta OR apache) AND website
Field Grouping-字段分组
- 使用小括号
- title:(+return +"pink panther")
Escaping Special Characters-转移特殊字符
- 特殊字符:+ - && || ! ( ) { } [ ] ^ " ~ * ? : \ /
- 使用后斜杠\转义