Lucene查询语法详解

时间:2022-08-27 21:03:57

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

Lucene查询语法详解的更多相关文章

  1. Mysql数据库查询语法详解

    数据库的完整查询语法 在平常的工作中经常需要与数据库打交道 , 虽然大多时间都是简单的查询抑或使用框架封装好的ORM的查询方法 , 但是还是要对数据库的完整查询语法做一个加深理解 数据库完整查询语法框 ...

  2. 【Solr】索引库查询界面详解

    目录 索引库查询界面详解 回到顶部 索引库查询界面详解 q:主查询条件.完全支持lucene语法.还进行了扩展. fq:过滤查询.是在主查询条件查询结果的基础上进行过滤.例如:product_pric ...

  3. Hadoop Hive sql语法详解

    Hadoop Hive sql语法详解 Hive 是基于Hadoop 构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式来分析存储在Hadoop 分布式文件系统中的数据,可以将结构 化的数据文件 ...

  4. Xpath语法详解

    1.简介 XPath是一门在XML和HTML文档中查找信息的语言,可以用来在XML和HTML文档中对元素和属性进行遍历 XPath的安装 Chrome插件XPath Helper 点Chrome浏览器 ...

  5. Oracle创建表语句(Create table)语法详解及示例

    创建表(Create table)语法详解1. ORACLE常用的字段类型ORACLE常用的字段类型有VARCHAR2 (size) 可变长度的字符串, 必须规定长度CHAR(size) 固定长度的字 ...

  6. query_string查询支持全部的Apache Lucene查询语法 低频词划分依据 模糊查询 Disjunction Max

    3.3 基本查询3.3.1词条查询 词条查询是未经分析的,要跟索引文档中的词条完全匹配注意:在输入数据中,title字段含有Crime and Punishment,但我们使用小写开头的crime来搜 ...

  7. Django框架 之 ORM查询操作详解

    Django框架 之 ORM查询操作详解 浏览目录 一般操作 ForeignKey操作 ManyToManyField 聚合查询 分组查询 F查询和Q查询 事务 Django终端打印SQL语句 在Py ...

  8. Oracle创建表语句(Create table)语法详解及示例、、 C# 调用Oracle 存储过程返回数据集 实例

    Oracle创建表语句(Create table)语法详解及示例 2010-06-28 13:59:13|  分类: Oracle PL/SQL|字号 订阅 创建表(Create table)语法详解 ...

  9. MongoDB各种查询操作详解

    这篇文章主要介绍了MongoDB各种查询操作详解,包括比较查询.关联查询.数组查询等,需要的朋友可以参考下   一.find操作 MongoDB中使用find来进行查询,通过指定find的第一个参数可 ...

随机推荐

  1. gfortran编译Fortran数组问题

    可能是IVF(inter visual fortran)比LF(lahey Fortran)编译器比较严格的原因 real :: A(L,M) = (/ 1,2,3,4,5,6,7,8,9,10,11 ...

  2. 【NLP】word2vec

    http://blog.csdn.net/mytestmy/article/details/26969149?utm_source=tuicool&utm_medium=referral

  3. getParamValues()

    http://blog.csdn.net/msg_java2011/article/details/6529226

  4. Yii 操作提示框实现

    如图: html  +  css   代码: 这是 YII  模板的写法 欢迎使用Yii <style> div.success{ background: #C5FBBD; border: ...

  5. 说说通信设置方式之hostonly

    Vmnetcfg.exe是配置它的网络. 虚拟机,虚拟出来有两个.VMnet1和VMnet8. ************************若用hostonly,则需要将VMnet1给启用.*** ...

  6. ListView&period;setOnItemClickListener无效

    如果ListView中的单个Item的view中存在checkbox,button等view,会导致ListView.setOnItemClickListener无效, 事件会被子View捕获到,Li ...

  7. C&num;串口数据收发数据

    using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...

  8. 【opatch打补丁】oracle10&period;2&period;0&period;5&period;0升级10&period;2&period;0&period;5&period;9 for linux

    https://wenku.baidu.com/view/c38702b56edb6f1afe001f59.html    这篇文章也不错,可参考 任务:oracle 10.2.0.5.0 打补丁升级 ...

  9. centos7离线安装rpm包自动解决依赖

    离线安装rpm包自动解决依赖参照https://blog.csdn.net/u011396718/article/details/80153515当生产环境由于安全原因处于断网状态的时候.通过本地源的 ...

  10. &num;35 string(缩点&plus;动态规划)

    容易发现有了交换相邻字符的操作后,只要字符串所含有的字符种类和数量相同其就是等价的.这样的状态只有n^3级别,将其抽象成点子串变换抽象成边后就是求最长路径了,缩点dp解决. 码量巨大,不是很明白要怎样 ...