原文来自:http://liyu2000.nease.net/article/Lucene/queryparsersyntax.htm
|
Lucene提供了方便您创建自建查询的API,也通过QueryParser提供了强大的查询语言。 本文讲述Lucene的查询语句解析器支持的语法,Lucene的查询语句解析器是使用JavaCC工具生成的词法解析器,它将查询字串解析为Lucene Query对象。 |
|
项( Term ) |
一条搜索语句被拆分为一些项(term)和操作符(operator)。项有两种类型:单独项和短语。 单独项就是一个单独的单词,例如"test" , "hello"。 短语是一组被双引号包围的单词,例如"hello dolly"。 多个项可以用布尔操作符连接起来形成复杂的查询语句(接下来您就会看到)。
扫描二维码关注公众号,回复:
839131 查看本文章
注意:Analyzer建立索引时使用的解析器和解析单独项和短语时的解析器相同,因此选择一个不会受查询语句干扰的Analyzer非常重要。 |
|
域( Field ) |
Lucene支持域。您可以指定在某一个域中搜索,或者就使用默认域。域名及默认域是具体索引器实现决定的。 您可以这样搜索域:域名+":"+搜索的项名。 举个例子,假设某一个Lucene索引包含两个域,title和text,text是默认域。如果您想查找标题为"The Right Way"且含有"don't go this way"的文章,您可以输入: title:"The Right Way " AND text:go 或者 title:"Do it right" AND right 因为text是默认域,所以这个域名可以不行。 注意:域名只对紧接于其后的项生效,所以 title:Do it right 只有"Do"属于title域。"it"和"right"仍将在默认域中搜索(这里是text域)。 |
|
项修饰符( Term Modifiers ) |
||||||||||||
Lucene支持项修饰符以支持更宽范围的搜索选项。
|
||||||||||||
|
布尔操作符可将项通过逻辑操作连接起来。Lucene支持AND, "+", OR, NOT 和 "-"这些操作符。(注意:布尔操作符必须全部大写)
|
|||||||||||||||
|
分组( Grouping ) |
Lucene支持使用圆括号来组合字句形成子查询。这对于想控制查询布尔逻辑的人十分有用。 搜索含有"jakarta"或者"apache",同时含有"website"的文档,使用查询: ( jakarta OR apache) AND website 这样就消除了歧义,保证website必须存在,jakarta和apache中之一也存在。 |
|
转义特殊字符( Escaping Special Characters ) |
Lucene支持转义特殊字符,因为特殊字符是查询语法用到的。现在,特殊字符包括 + - && || ! ( ) { } [ ] ^ " ~ * ? : \ 转义特殊字符只需在字符前加上符号\,例如搜索(1+1):2,使用查询 \(1\+1\)\:2 |