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. Disabling default console handler in Java Logger by codes

    The open source packages usu. relies on log4j or Java Logger to print logs, by default the console h ...

  2. .Net Core CLI在CentOS7的安装及使用简介

    1. 安装libunwind cd /usr/local/src wget http://download.savannah.gnu.org/releases/libunwind/libunwind- ...

  3. [Asp.net 开发系列之SignalR篇]专题二:使用SignalR实现酷炫端对端聊天功能

    一.引言 在前一篇文章已经详细介绍了SignalR了,并且简单介绍它在Asp.net MVC 和WPF中的应用.在上篇博文介绍的都是群发消息的实现,然而,对于SignalR是为了实时聊天而生的,自然少 ...

  4. nginx(4、缓存)

    nginx提供内置的缓存功能,对静态文件,如html\css\js等能够缓存在本地,即nginx服务器的某个目录下. 其配置主要是两部分: 1.在http下配置一个缓存路径: proxy_cache_ ...

  5. Javascript事件机制兼容性解决方案

    本文的解决方案可以用于Javascript native对象和宿主对象(dom元素),通过以下的方式来绑定和触发事件: 或者 var input = document.getElementsByTag ...

  6. JavaScript使用DeviceOne开发实战(三)仿微信应用

    这是一个系列的文档,长期目标是利用DeviceOne开发一些目前使用广泛的优质手机应用,我们会最大化的实现这些应用的每一个功能和细节,不只停留在简单的UI模仿和Demo阶段,而是一个基本可以使用的实际 ...

  7. angularjs移除不必要的$watch

    在我们的web page,特别是移动设备上,太多的angular $watch将可能导致性能问题.这篇文章将解释如何去移除额外的$watch提高你的应用程序性能. $watch如果不再使用,我们最好将 ...

  8. JavaScript思维导图—数组

    JavaScript思维导图-来自@王子墨http://julying.com/blog/the-features-of-javascript-language-summary-maps/

  9. DDD领域驱动设计实践篇之如何提取模型

    需求说明: 省级用户可以登记国家指标 省级用户和市级用户可以登记指标分解 登记国家指标时,需要录入以下数据:指标批次.文号.面积,这里省略其他数据,下同 登记指标分解时,需要录入以下数据:指标批次.文 ...

  10. Asp.net MVC JsonResult 忽略属性

    指定 JavaScriptSerializer 不序列化公共属性或公共字段.无法继承此类. 命名空间:  System.Web.Script.Serialization 程序集:  System.We ...