Lucene查询语法详解

转自:https://www.cnblogs.com/xing901022/p/4974977.html
Lucene查询语法详解
Lucene查询
Lucene查询语法以可读的方式书写,然后使用JavaCC进行词法转换,转换成机器可识别的查询。

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

Terms词语查询
词语搜索,支持 单词 和 语句。

单词,例如:”test”,”hello”
语句,例如:”hello,world!”
多个词语可以通过操作符,连接成更复杂的搜索逻辑。

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

title:hello
或者
title:”hello title”
搜索语句时需要加上双引号,否则:

title:hello title
就意味着,搜索title为hello,或者包含title关键字的文档
Term Modifier修饰符查询
Lucene支持对词语增加修饰,从而扩大查询的范围。

WildCard Searches通配符查询
支持在单个单词或者语句中添加通配符:

?匹配单个字符
*匹配0个或多个字符
例如:

=>想要搜索test或者text

te?t

=>想要搜索test tests tester

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

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词语相关度查询
如果单词的匹配度很高,一个文档中或者一个字段中可以匹配多次,那么可以提升该词的相关度。使用符号^提高相关度。

例如:

=>提高jarkarta的比重
jakarta apache
可以采用下面的语法:

jakarta^4 apache
Boolean Operator布尔操作符
支持多种操作符:

AND
AND操作符用于连接两个搜索条件,仅当两个搜索条件都满足时,才认为匹配。通常用来做交集操作。也可以使用&&替换。

注意必须使用大写。如果不使用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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值