Lucene查询语法详解

Lucene查询

Lucene查询语法以可读的方式书写,而后使用JavaCC进行词法转换,转换成机器可识别的查询。api

下面着重介绍下Lucene支持的查询:code

Terms词语查询

词语搜索,支持 单词 和 语句。ci

  • 单词,例如:"test","hello"
  • 语句,例如:"hello,world!"

多个词语能够经过操做符,链接成更复杂的搜索逻辑。文档

Field字段查询

Lucene支持针对某个字段进行搜索,语法如:it

title:hello
或者
title:"hello title"

搜索语句时须要加上双引号,不然:test

title:hello title
就意味着,搜索title为hello,或者包含title关键字的文档

Term Modifier修饰符查询

Lucene支持对词语增长修饰,从而扩大查询的范围。搜索

WildCard Searches通配符查询

支持在单个单词或者语句中添加通配符:语法

  • ?匹配单个字符
  • *匹配0个或多个字符

例如:kibana

=>想要搜索test或者text

te?t

=>想要搜索test  tests  tester

test*

文档中不支持通配符放在搜索的开头,如*test,可是在kibana中是支持这种搜索语法的。im

Fuzzy Searches模糊词查询

支持搜索模糊词,若是想要搜索模糊词,须要在词语后面加上符号~

例如:

=>想要搜索和test相近的词

test~

能够搜索出text或者tests等词

也支持在~后面添加模糊系数,模糊系数[0-1],越靠近1表示越相近,默认模糊系数为0.5。

test~0.8

Proximity Searches邻近词查询

前面的模糊词只是针对某个单词,在语句间也存在模糊搜索的概念,只不过不是单词的模糊,而是单词之间内容的模糊。

注意要使用双引号`""`包围

例如:

=>想要搜索包含"hello""world"的文档,这两个单词中间能够有一部份内容(这部份内容经过字符个数限制)

"hello world"~10

能够匹配"hello 123 world"
或者"hello,Tom,world"

Range Searches范围查询

支持范围搜索,能够指定最小值和最大值,会自动查找在这之间的文档。若是是单词,则会按照字典顺序搜索。

  • {}尖括号表示不包含最小值和最大值,能够单独使用
  • []方括号表示包含最小值和最大值,能够单独使用

例如:

=>搜索成绩grade字段小于等于80分,大于60分的

grade:{60,80]

=>搜索名字在A和C之间的

name:{A,C}

返回,bone、baby、barry

Boosting a Term词语相关度查询

若是单词的匹配度很高,一个文档中或者一个字段中能够匹配屡次,那么能够提高该词的相关度。使用符号^提升相关度。

例如:

=>提升

Boolean Operator布尔操做符

支持多种操做符:

AND

AND操做符用于链接两个搜索条件,仅当两个搜索条件都知足时,才认为匹配。一般用来作交集操做。也可使用&&替换。

注意必须使用大写。

例如:

=> 搜索同时包含tom和john的文档

tom AND john
或者
tom && john

OR

OR操做符用于链接两个搜索条件,当其中一个条件知足时,就认为匹配。一般用来作并集操做。也可使用||替换。

注意必须使用大写。

例如:

=>搜索包含tom或者john的文档

tom OR john
或者
tom || john

NOT

NOT操做符排除某个搜索条件。一般用来作差集操做也可使用!替换。

注意必须大写。

例如:

=>搜索包含tom,不包含john的文档

tom NOT john
或者
tom && !john

在kibana中支持单独使用,如:

=>排除包含test的文档

NOT test

+

包含该操做符后跟着的搜索条件,如:

=>搜索包含tom的文档

+tom

做用于AND的差很少,可是支持单独使用

-

排除该操做符后跟着的搜索条件,如:

=>搜索不包含tom的文档

-tom

效果相似NOT

Grouping分组

支持使用小括号对每一个子句进行分组,造成更为复杂的查询逻辑。

例如:

=>要搜索包含hello的文档中,也包含tom或者john的

hello AND (tom OR john)

也支持在字段中使用小括号:

=>要搜索标题中,既包含return 也包含pink panther的

title:(+return +"pink panther")

Escaping Special Character转义字符

因为Lucene中支持不少的符号,如

+ - && || ! ( ) { } [ ] ^ " ~ * ? : \

所以若是须要搜索 (1+1):2 须要对改串进行转换,使用字符\

\(1\+1\)\:2
相关文章
相关标签/搜索