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或者textte?t=>想要搜索test tests testertest*
文档中不支持通配符放在搜索的开头,如*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
转载于:https://www.cnblogs.com/xing901022/p/4974977.html
Lucene查询语法详解相关推荐
- Mysql数据库查询语法详解
数据库的完整查询语法 在平常的工作中经常需要与数据库打交道 , 虽然大多时间都是简单的查询抑或使用框架封装好的ORM的查询方法 , 但是还是要对数据库的完整查询语法做一个加深理解 数据库完整查询语法框 ...
- Mysql查询汉字语法_Mysql数据库查询语法详解
___聚合函数___max():最大值min():最小值avg():平均值sum():和count():记数 group_concat():组内字段拼接,用来查看组内其他字段 ___example__ ...
- Elasticsearch(es) 查询语句语法详解
Elasticsearch 查询语句采用基于 RESTful 风格的接口封装成 JSON 格式的对象,称之为 Query DSL.Elasticsearch 查询分类大致分为全文查询.词项查询.复合查 ...
- [深入学习C#]LINQ查询表达式详解(1)——基本语法、使用扩展方法和Lambda表达式简化LINQ查询
此文章非原创,转载自诗人江湖老,原文地址 在Git上下载源码 在工程中我们少不了要定义类或者结构去储存数据,这些数据将被临时地储存在内存中,现在我们想要对其完成一些类似于查找.过滤等等常见的任务的时候 ...
- SQL全方位攻略:5. SQL “方言”大比拼:Oracle、MySQL、PostgreSQL限制检索行数语法详解(分页查询)
系列文章目录 SQL全方位攻略:1.数据库介绍 SQL全方位攻略:2.SQL介绍 SQL全方位攻略:3.SQL标准 SQL全方位攻略:4. 标准SQL和SQL"方言" 文章目录 系 ...
- Python的Xpath介绍和语法详解
1.简介 XPath是一门在XML和HTML文档中查找信息的语言,可以用来在XML和HTML文档中对元素和属性进行遍历 XPath的安装 Chrome插件XPath Helper 点Chrome浏览器 ...
- js 正则中冒号代表什么_javascript中正则表达式语法详解
好久都没有写博客了,主要是太懒了,尤其是在阳春三月,风和日丽的日子,太阳暖暖的照在身上,真想美美的睡上一觉.就导致了这篇博客拖到现在才开始动笔,javascript的正则这一块也不是什么新的东西,主要 ...
- Oracle创建表语句(Create table)语法详解及示例
Oracle创建表语句(Create table)语法详解及示例 创建表(Create table)语法详解 1. ORACLE常用的字段类型ORACLE常用的字段类型有 VARCHAR2 (si ...
- HBase数据结构与基本语法详解
HBase数据结构与基本语法详解.背景: 阅读新闻 [日期:2019-01-06] 来源:Linux社区 作者:Linux [字体:大 中 小] HBase中的表一般有这样的特点: 1 大:一个表可以 ...
最新文章
- 【Bug档案01】Spring Boot的控制器+thymeleaf模板 -使用中出现静态资源加载路径不当的问题 -解决时间:3h
- Jeremy Keith在 Fronteers 2010 上的主题演讲
- php实时上传多张图片,php实现多图片上传程序代码
- Phoenix 关联映射 Hbase表 获取不到数据,upsert hbase 列名为16进制字符
- 超级大水题(还是自己过不了的水题)
- 42、C++ Primer 4th笔记,IO库,未格式化IO操作
- 智能指针(二):shared_ptr实现原理
- Mac使用minicom串口工具
- VS2015搭建live555源码调试环境
- 视觉SLAM十四讲学习笔记-第五讲-图像和实践
- git 中怎样查看未传送(git push)到远程代码库的(git commit)提交?
- 淘宝褚霸谈做技术的心态
- 浅谈在线IDE的搭建,配置,体验
- 矢量网络分析仪程控软件
- App开发外包给专业软件开发公司,需要注意什么?
- mysql可重复读概念_Mysql可重复读原理
- Qsetting本地缓存PC端数据
- 斐讯音箱控制扫地机器人_斐讯扫地机器人app
- Cardboard Unity SDK Reference 翻译版
- 计算机知识对于老师的帮助,教师计算机学习心得体会