Lucene 的Query Parser(查询语法)

来源:互联网 发布:pp助手mac版 编辑:程序博客网 时间:2024/06/02 04:19

本文根据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的特殊字符包括:    + - && || ! ( ) { } [ ] ^ " ~ * ? : /
    要想获得这些特殊字符的字面值,用"/"进行转义即可。

原创粉丝点击