本文根据Lucene官方文档整理而成。
Query Parser 语法
版本;Lucene 3.0.0
来源:http://lucene.apache.org/java/3_0_0/queryparsersyntax.html
term:
语法:
term = SingleTerm | PhraseTerm
Single Term = 单个word,如"hello"
Phrases Term = 用双引号""括起的短语,如"hello dolly"
Field:
对某个指定字段进行查询,其语法为:
[Field:]term
如果省略field,则对缺省字段进行查询。
注意:在指定filed时,它只修饰它的直接term,即紧挨着它的term。
例如,如果要检索字段title是否包含"Do it right",正确的写法为:title:"Do it right" ,
而不是title:Do it right,后者将查询title字段是否包含"Do" 或者缺省字段text中是否包含it 或者 right关键字。
Field Grouping:(group multiple clauses to a single field.)
语法:
Field:(multiple-term-expression)
查询field字段是否满足多个term子句的条件,即用"()"括起的term表达式。此语法使得表达式更加紧凑。
如:title:(+return +"pink panther")
title必须包含return和"pink panther"
Term Modifiers:(项修饰符)
通配符(Wildcard Searches):
?表示匹配单个字符
* 表示匹配0到多个字符
说明:
这两个特殊字符只能用于修饰SingleTerm,且不能是SingleTerm的第一个字符。
如果在PhraseTerm中出现,则为字面含义,不被看做通配符,常被看作stop word而被忽略。
模糊匹配(Fuzzy Searches):
语法; SingleTerm~[n] n=[0,1]
查找与term相似度为n的匹配项,n越大越相似,缺省n为0.5
邻近搜索(Proximity Searches):
语法:PhraseTerm~n
指定phrase中的单词的邻近距离,如:"jakarta apache"~10 表示jakarta与apache的距离应在10个单词以内
如指定n=0则表示这两个word紧挨着,但不保证它们出现的先后顺序。
范围搜索(Range Searches):
语法:
[r1 TO r2] 闭区间
or
{r1 TO r2} 开区间
说明:
排序规则为字典序。
括弧应匹配,不能将"{"和"]"混合使用。(此为用Luke在2.4.9的索引上测试的情况)
增加相关度(Boosting a Term):
语法:
term^n (n>0,default n=1)
如果文档中出现term关键字,则在计算其相关度时其权重增加。
布尔表达式:
布尔操作符(全部大写):AND(&&), "+", OR(||), NOT(!),"-"
几个等价关系:
AND = &&
OR = ||
NOT = !
几点说明:
或关系:term之间如果没有布尔操作符,则等价于OR
非关系:NOT是二元表达式,单个term不能用NOT表达式。
"+" required operator:必有操作符
其语法为:
+term
表示必须包含term,此为一元表达式
"-" prohibit operator:必无操作符
其语法为:
-term
表示不可包含term,此为一元表达式
表达式的优先级:
表达式的优先级缺省遵循布尔表达式的规则,但可以通过"()"改变表达式的优先级。
如:(jakarta OR apache) AND website
转义字符:
Lucene的特殊字符包括: + - && || ! ( ) { } [ ] ^ " ~ * ? : /
要想获得这些特殊字符的字面值,用"/"进行转义即可。