lucene 查询语法

Lucene所支持的查询语法可见http://lucene.apache.org/java/3_0_1/queryparsersyntax.html  

新版6.0.0可见 : http://lucene.apache.org/core/6_0_0/queryparser/org/apache/lucene/queryparser/classic/package-summary.html#package_description

(1) 语法关键字

+ - && || ! ( ) { } [ ] ^ " ~ * ? : \ /

如果所要查询的查询词中本身包含关键字,则需要用\进行转义。

(2) 查询词(Term)

Lucene支持两种查询词,一种是单词,如"hello",一种是词组(phrase),如"hello world"。

title: hello 表示查询在title域中含有hello单词的文档。

title: "hello world" 表示查询在title域中含有hello world 词组的文档。

title:(hello world) 表示查询在title域中含有hello 与 world 单词的文档。

(3) 查询域(Field)

在查询语句中,可以指定从哪个域中寻找查询词,如果不指定,则从默认域中查找。

查询域和查询词之间用:分隔,如title:"Do it right"。

:仅对紧跟其后的查询词起作用,如果title:Do it right,则仅表示在title中查询Do,而it right要在默认域中查询。

(4) 通配符查询(Wildcard)

支持两种通配符:?表示一个字符,*表示多个字符。

通配符可以出现在查询词的中间或者末尾,如te?t,test*,te*t,但决不能出现在开始,如*test,?test。

(5) 模糊查询(Fuzzy)

模糊查询的算法是基于Levenshtein Distance,也即当两个词的差别小于某个比例的时候,就算匹配,如roam~0.8,即表示差别小于0.2,相似度大于0.8才算匹配。

(6) 临近查询(Proximity)

在词组后面跟随~10,表示词组中的多个词之间的距离之和不超过10,则满足查询。

所谓词之间的距离,即查询词组中词为满足和目标词组相同的最小移动次数。

如索引中有词组"apple boy cat"。

如果查询词为"apple boy cat"~0,则匹配。

如果查询词为"boy apple cat"~2,距离设为2方能匹配,设为1则不能匹配。


(0)


boy


apple


cat


(1)

 
boy

apple


cat


(2)


apple


boy


cat

如果查询词为"cat boy apple"~4,距离设为4方能匹配。


(0)


cat


boy


apple


(1)

 
cat

boy


apple


(2)

 
boy


cat

apple


(3)

 
boy

apple


cat


(4)


apple


boy


cat

 

(7) 区间查询(Range)

区间查询包含两种,一种是包含边界,用[A TO B]指定,一种是不包含边界,用{A TO B}指定。

如date:[20020101 TO 20030101],当然区间查询不仅仅用于时间,如title:{Aida TO Carmen}

(8) 增加一个查询词的权重(Boost)

可以在查询词后面加^N来设定此查询词的权重,默认是1,如果N大于1,则说明此查询词更重要,如果N小于1,则说明此查询词更不重要。

如jakarta^4 apache,"jakarta apache"^4 "Apache Lucene"

(9) 布尔操作符

布尔操作符包括连接符,如AND,OR,和修饰符,如NOT,+,-。

默认状态下,空格被认为是OR的关系,QueryParser.setDefaultOperator(Operator.AND)设置为空格为AND。

+表示一个查询语句是必须满足的(required),NOT和-表示一个查询语句是不能满足的(prohibited)。

(10) 组合

可以用括号,将查询语句进行组合,从而设定优先级。

如(jakarta OR apache) AND website

 

Lucene的查询语法是由QueryParser来进行解析,从而生成查询对象的。

通过编译原理我们知道,解析一个语法表达式,需要经过词法分析和语法分析的过程,也即需要词法分析器和语法分析器。

QueryParser是通过JavaCC来生成词法分析器和语法分析器的。

时间: 2024-12-24 14:58:28

lucene 查询语法的相关文章

Lucene查询语法详解

Lucene查询 Lucene查询语法以可读的方式书写,然后使用JavaCC进行词法转换,转换成机器可识别的查询. 下面着重介绍下Lucene支持的查询: Terms词语查询 词语搜索,支持 单词 和 语句. 单词,例如:"test","hello" 语句,例如:"hello,world!" 多个词语可以通过操作符,连接成更复杂的搜索逻辑. Field字段查询 Lucene支持针对某个字段进行搜索,语法如: title:hello 或者 titl

solr查询语法

配置好solr后,可以通过web管理界面进行管理和查询.web界面基本列出了大多数查询参数,可以通过这个学习lucene的查询语法.solr的查询解析是通过queryParser来配置的(solrconfig.xml),一般我们用默认的即可.其各参数含义与用法简单解释如下:q:查询输入,必须.可以使用运算符fq:过滤查询.可以使用运算符sort:排序的字段,格式为field score,多个字段之间用逗号隔开,比如sum(x_f, y_f) desc, price asc,默认是score de

solr学习笔记之solr查询语法

配置好solr后,可以通过web管理界面进行管理和查询.web界面基本列出了大多数查询参数,可以通过这个学习lucene的查询语法. solr的查询解析是通过queryParser来配置的(solrconfig.xml),一般我们用默认的即可.其各参数含义与用法简单解释如下: q:查询输入,必须.可以使用运算符 fq:过滤查询.可以使用运算符 sort:排序的字段,格式为field score,多个字段之间用逗号隔开,比如sum(x_f, y_f) desc, price asc,默认是scor

C#3.0 LINQ查询语法

首先来看一个很简单的LINQ查询例子,查询一个int 数组中小于5的数字,并按照大小顺序排列:class Program{    static void Main(string[] args)    {        int[] arr = new int[] { 8, 5, 89, 3, 56, 4, 1, 58 };         var m = from n in arr where n < 5 orderby n select n;        foreach (var n in m

Solr常用查询语法笔记

1.常用查询 q - 查询字符串,这个是必须的.如果查询所有*:* ,根据指定字段查询(Name:张三 AND Address:北京) fq - (filter query)过虑查询,作用:在q查询符合结果中同时是fq查询符合的,例如:q=Name:张三&fq=CreateDate:[20151001 TO 20151031] fl - 指定返回那些字段内容,用逗号或空格分隔多个.  start - 返回第一条记录在完整找到结果中的偏移位置,0开始,一般分页用.  rows - 指定返回结果最多

LINQ 查询语法

        在LINQ中,数据源和查询结果实际上都是IEnumerable<T>或IQueryable<T>类型对象           LINQ主要的功能就是实现查询,LINQ查询存在以下两种形式.           ⑴ Method Synta (查询方法方式):主要利用 System.Linq.Enumerable 类中定义的扩展方法和Lambda 表达式方式进行查询.它提供了一种增强了程序的可读性的语法,易读易写,写时不容易出错.Visual Studio 2010为

select-mysql 查询语法有单引号,但是我的where条件也有单引号,怎么解?

问题描述 mysql 查询语法有单引号,但是我的where条件也有单引号,怎么解? 比如select * from t where name like '%a's%'这种情况 解决方案 两个单引号 select * from t where name like '%a''s%' 解决方案二: select * from t where name = 'test''abc'; 解决方案三: 不是,是我的条件是 name=test'abc这种 解决方案四: SQL WHERE 子句中的单引号sql

《MongoDB管理与开发精要》——3.2节查询语法

3.2 查询语法 MongoDB最大的特点是,它支持的查询语言非常强大,其语法类似于面向对象的查询语言,不但可以实现关系型数据库查询的大部分功能,而且还支持对数据建立索引.由于MongoDB可以支持非常复杂的数据结构,同时带有强大的数据查询功能,因此非常受欢迎,很多项目都考虑用MongoDB来替代MySQL等传统数据库来实现复杂的Web应用.很多案例都是因为数据量实在太大,所以迁移到MongoDB上,从而数据查询的速度得到了非常显著的提升.3.2.1 数组内容的查询 MongoDB本身支持数组类

Apache Solr查询语法

查询参数 常用: q - 查询字符串,必须的. fl - 指定返回那些字段内容,用逗号或空格分隔多个. start - 返回第一条记录在完整找到结果中的偏移位置,0开始,一般分页用. rows - 指定返回结果最多有多少条记录,配合start来实现分页. sort - 排序,格式:sort=<field name>+<desc|asc>[,<field name>+<desc|asc>].示例:(inStock desc, price asc)表示先 &qu