译自: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”(在本例中为文本字段)。
te?t
多个字符通配符搜索查找0或更多字符。例如,为了搜索test, tests or tester,您可以使用搜索:
test*
可以在一个术语的中间使用通配符搜索。
te*t
注意:您不能使用*或者?符号作为搜索的第一个字符。
roam~
可以查询类似roam和roams
roam~0.8
临近搜索
"hello world"~10
可以匹配"hello 123 world"
mod_date:[20020101 TO 20030101]
这将找到mod_date字段在20020101到20030101之间具有值的文档。注意,范围查询不是为日期字段保留的。您还可以使用非日期字段的范围查询:
title:{Aida TO Carmen}
这将会找到所有在Aida和Carmen之间的文件,但不包括Aida和Carmen。
+符号后面的字符必须存在于一个文档的某个字段
+jakarta lucene 必须包含jakarta 不一定包含lucene
NOT
NOT "jakarta apache" 不包含 "jakarta apache"
-不包含搜索条件
"jakarta apache" -"Apache Lucene" 有"jakarta apache",没有"Apache Lucene"
分组
Lucene支持使用圆括号将子句组合成子查询。如果您想要控制查询的布尔逻辑,这将非常有用。
title:(+return +"pink panther") 既包含return 也包含pink panther的
转义特殊字符
+ - && || ! ( ) { } [ ] ^ " ~ * ? : \
使用\进行转义:
\(1\+1\)\:2