您的位置:首页 > 产品设计 > UI/UE

Lucene 的Query Parser(查询语法)

2013-12-29 16:45 375 查看
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=[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的特殊字符包括: + - && || ! ( ) { } [ ] ^ " ~ * ? : /

要想获得这些特殊字符的字面值,用"/"进行转义即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: