Lucene查询语法汇总
雪山飞猪 人气:0
[toc]
Lucene是目前最为流行的开源全文搜索引擎工具包,提供了完整的查询引擎和索引引擎,部分文本分析引擎。
我们平时使用kibana、阿里云的日志查询或者其他一些lucene二次开发的产品,几乎都支持lucene语法。
下面给大家演示各种查询方式,更多请参考 [Apache Lucene - Query Parser Syntax](https://lucene.apache.org/core/2_9_4/queryparsersyntax.html)
# 一、单词查询
直接使用单词,例如`chenqionghe`
![](https://img2020.cnblogs.com/blog/662544/202003/662544-20200315234856582-1851434368.png)
多个单词,可以用逗号或者空格隔开,例如`chenqionghe,活动`
![](https://img2020.cnblogs.com/blog/662544/202003/662544-20200315234901518-1016425009.png)
可以指定`字段:空格`来查询,例如`page: 18`、`content:"sport"`
![](https://img2020.cnblogs.com/blog/662544/202003/662544-20200315234905624-691688890.png)
![](https://img2020.cnblogs.com/blog/662544/202003/662544-20200315234908816-1069483712.png)
# 二、通配符查询
* ?匹配单个字符
* *匹配0或多个字符
例如`muscle?`能匹配到muscles
![](https://img2020.cnblogs.com/blog/662544/202003/662544-20200315234914781-1822260732.png)
搜索`hi*er`
![](https://img2020.cnblogs.com/blog/662544/202003/662544-20200315234917849-750005955.png)
搜索` *er`
![](https://img2020.cnblogs.com/blog/662544/202003/662544-20200315234922896-1189094384.png)
# 三、模糊查询
`~`:在一个单词后面加上~启用模糊搜索,可以搜到一些拼写错误的单词
例如`first~`能匹配到错误的单词frist
![](https://img2020.cnblogs.com/blog/662544/202003/662544-20200315234932823-76038304.png)
可以在~后面添加模糊系数,例如`first~0.8`,模糊系数[0-1],越靠近1表示越相近,默认模糊系数为0.5。
# 四、近似查询
在短语后面加上`~`,可以搜到被隔开或顺序不同的单词
`"life movement"~2`表示life和movement之间可以隔开2两个词
![](https://img2020.cnblogs.com/blog/662544/202003/662544-20200315234937825-1556591661.png)
# 五、范围查询
* `page: [2 TO 8]`
* `page: {2 TO 8}`
`[]`表示端点数值包含在范围内,`{}`表示端点不包含在范围内
搜索第2到第8页,包含两端点`page: [2 TO 8]`
![](https://img2020.cnblogs.com/blog/662544/202003/662544-20200315234948875-447393704.png)
搜索第2到第8页,不包含两端点`page: {2 TO 8}`
![](https://img2020.cnblogs.com/blog/662544/202003/662544-20200315234953325-1088542794.png)
搜索第2到第8页,包含起始不包含末端`page: [2 TO 8}`
![](https://img2020.cnblogs.com/blog/662544/202003/662544-20200315234958222-693100396.png)
# 六、优先级查询
如果单词的匹配度很高,一个文档中或者一个字段中可以匹配多次,那么可以提升该词的相关度。使用符号`^`提高相关度。
![](https://img2020.cnblogs.com/blog/662544/202003/662544-20200315235024112-60322602.png)
![](https://img2020.cnblogs.com/blog/662544/202003/662544-20200315235029784-1303930834.png)
默认为1,可以为0~1之间的浮点数,来降低优先级
# 七、逻辑操作
* `AND`:逻辑与,也可以用`&&`代替
* `OR`:逻辑或,也可以使用`||`代替
* `NOT`:逻辑非,也可以使用`!`代替
* +:必须包含
* -:不能包含
如`muscle AND easy`,muscle和easy必须同时存在
![](https://img2020.cnblogs.com/blog/662544/202003/662544-20200315235038749-263563406.png)
`muscle NOT easy`,muscle存在easy不存在
![](https://img2020.cnblogs.com/blog/662544/202003/662544-20200315235044128-6368951.png)
`muscle OR easy`,muscle或easy存在
![](https://img2020.cnblogs.com/blog/662544/202003/662544-20200315235049567-1599177641.png)
例如`+life -lies`:必须包含life,不包含lies
![](https://img2020.cnblogs.com/blog/662544/202003/662544-20200315235053447-1921880544.png)
# 八、括号分组
可以使用小括号对子句进行分组,构造更复杂的查询逻辑
`chenqionghe OR (生命 AND 运动)`
![](https://img2020.cnblogs.com/blog/662544/202003/662544-20200315235058743-417702340.png)
同时,也可以在字段中使用小括号分组,例如`content:(+chenqionghe +"muscle")`
![](https://img2020.cnblogs.com/blog/662544/202003/662544-20200315235103204-1823207467.png)
# 九、转义特殊字符
`+ - && || ! ( ) { } [ ] ^ " ~ * ? : \`
这些字符需要转义
例如`\(1\+1\)\:2`用来查询(1+1):2
到这就讲完了,是不是觉得超简单,惊不惊喜,意不意外呀~
加载全部内容