Apache Lucene查询解析语法

译自:https://lucene.apache.org/core/2_9_4/queryparsersyntax.html

Apache Lucene查询解析语法


术语
查询被分解成术语和操作符。有两种术语:单一术语和短语。
一个单词是一个单词,例如“test”或“hello”。
短语是一组被双引号包围的词,如“hello dolly”。
可以将多个术语与布尔运算符组合在一起,形成更复杂的查询(见下面)。
字段
Lucene支持现场数据。可以指定字段,也可以使用默认字段。字段名和默认字段是具体实现的。

您可以通过输入字段名和冒号“:”和您正在查找的术语来搜索任何字段。

作为一个例子,让我们假设一个Lucene索引包含两个字段,title和text并且text是默认字段。如果你想找到一份名为“The Right Way”的文件,其中包含了“don't go this way”的文字,你可以进入:

 title:"The Right Way" AND text:go

由于text是默认字段,也可以写成
title:"The Right Way" AND go
注意:该字段仅对其直接前面的术语有效,因此查询
		title:The Right Way
只会在标题栏中找到“The”。它将在默认字段中找到“Right”和“Way”(在本例中为文本字段)。
词修饰符
Lucene支持修改查询条件以提供广泛的搜索选项。
通配符搜索
Lucene支持单个和多个字符的通配符搜索(不是在短语查询中)。
要执行单个字符的通配符搜索,使用“?”符号。
要执行一个多字符的通配符搜索使用“*”符号。
单个字符通配符搜索查找与单个字符替换的匹配项。例如,要搜索“text”或“test”,您可以使用搜索:
		te?t
多个字符通配符搜索查找0或更多字符。例如,为了搜索test, tests or tester,您可以使用搜索:
	test*
可以在一个术语的中间使用通配符搜索。
	te*t
注意:您不能使用*或者?符号作为搜索的第一个字符。
模糊搜索
Lucene支持基于Levenshtein距离的模糊搜索,或者编辑距离算法。要进行模糊搜索,可以使用波浪号,“~”,在一个词的结束时的符号。例如,搜索一个类似于拼写“roam”的词,使用模糊搜索:
	roam~
可以查询类似roam和roams


从Lucene 1.9开始,一个附加的(可选的)参数可以指定所需的相似性。值在0到1之间,(如果没有给出参数,将使用默认值为0.5。)值更接近1,只有具有更高相似性的条件才会匹配。例如:
	roam~0.8
临近搜索
Lucene支持在特定的距离内找到单词。要做近距离搜索,使用“~”,一个短语的末尾的符号。例如=>想要搜索包含"hello""world"的文档,这两个单词中间可以有一部分内容(这部分内容通过字符个数限制)
"hello world"~10			
可以匹配"hello 123 world"
或者"hello,Tom,world"
范围搜索
范围查询允许一个匹配域(s)值位于范围查询指定的下界和上界之间的文档。范围查询可以是包容的,也可以是上下限的。排序是按照字典顺序来排序的。
	mod_date:[20020101 TO 20030101]
这将找到mod_date字段在20020101到20030101之间具有值的文档。注意,范围查询不是为日期字段保留的。您还可以使用非日期字段的范围查询:
	title:{Aida TO Carmen}		
这将会找到所有在Aida和Carmen之间的文件,但不包括Aida和Carmen。
包含范围查询用方括号表示。专用范围查询用花括号表示。
布尔操作符
布尔运算符允许通过逻辑运算符组合项。Lucene支持 AND “+”,OR,NOT和“-”作为布尔运算符(注意:布尔运算符必须是大写的)。
OR操作符是缺省连接操作符。
这意味着,如果在两个术语之间没有布尔运算符,则使用OR操作符。
OR操作符链接两个术语,如果文档中的任一项都存在,就会找到匹配的文档。这相当于一个使用集合的联合。也可以使用||来表示OR。


以下 查询结果一致
“a” b
“a” OR b
“a” || b


AND
AND操作符匹配文档中两个术语都存在的文档。这相当于一个使用集合的交集。符号&&可用于代替单词和单词。
+包含搜索条件

+符号后面的字符必须存在于一个文档的某个字段

	+jakarta lucene 必须包含jakarta 不一定包含lucene	
NOT
NOT操作符不包含包含该术语的文档。这等价于使用集合的不同。象征!可以代替NOT。
NOT "jakarta apache" 不包含 "jakarta apache"
-不包含搜索条件
"jakarta apache" -"Apache Lucene" 有"jakarta apache",没有"Apache Lucene"
	分组	
Lucene支持使用圆括号将子句组合成子查询。如果您想要控制查询的布尔逻辑,这将非常有用。
(jakarta OR apache) AND website
字段分组
Lucene支持使用圆括号将多个子句分组到一个单独的字段中。
	title:(+return +"pink panther") 既包含return 也包含pink panther的
转义特殊字符
Lucene支持转义特殊字符,这些字符是查询语法的一部分。当前列表的特殊字符是

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

使用\进行转义:
例如,搜索(1+1):2使用查询
\(1\+1\)\:2



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值