Lucene 的基本查询语法
多域联合查询
如果希望查询 title 域为 The Right Way 且 text 域为 good job 的文档:
title:“The Right Way” AND text:“good job”
在 Lucene 中空格默认会作为 OR 操作符来连接多个子查询语句
title:“The Right Way” text:“good job”
#等价于
title:“The Right Way” OR text:“good job”
注意:所有的 Boolean 操作符必须大写
通配符查询
*
和 ?
通配符,单个字符使用 ?
,多个字符使用 *
通配,例如 查询姓“王”的文档:
name:王*
Lucene 默认的查询解析器是不支持做模糊查询的,即 *xxx
的写法。但是 Solr 的标准查询解析器扩展了 Lucene 的模糊查询,支持做模糊匹配。 如果你想要查询 content 字段“text”或“test”:
content:te?t
Fuzzy Query(模糊/近似查询)
如果你要查询一个和“roam”拼写相似的单词,那么你可以指定表达式:
roam~
这个查询会包含 foam、roams 等单词的索引文档。当然你也可以在 ~
之后制定一个相似度数值来限定返回结果,相似度数值范围为[0~1],默认是 0.5,示例如下:
roam~0.85
间隔查询
查找两个单词之间间隔指定距离的索引文档。 比如查询“apache”和“jakarta”之间间隔 10 个单词索引文档:
"jakarta apache"~10
范围查询
使用 []
表示包含边界,使用 {}
表示不包含边界。 例如查询 10<=id<20 的数据:
id:[10 TO 20}
通配符 *
也可以用于任意一个端点或两个端点,以指定一个开放式范围查询。例如: [* TO 70]
使用通配符匹配 NaN
:
对于大多数字段,无界范围查询 field:[* TO *]
等同于存在查询 field: *
。然而,对于支持 NaN 值的 float/double
类型,这两个查询的结果是不同的。
field:*
:匹配存在的值,包括 NaNfield:[* TO *]
:匹配所有实际的值,不包含 NaN
指定 Term 权重查询(指定相关性查询 relevance level)
Lucene 查询提供了对匹配文档中包含指定 Term 的相关性(权重值)进行指定的功能。权重值用数字表示,Term 的相关性越高那么它的 Boost 权重值就越大。为一个 Term 指定权重值可以使用 ^
符号并在它后面添加一个数值,默认的权重值是 1,数值必须是正数,可以为小数。 比如我要查询地址中包含“香车路”和“玉秀路”的数据,但是“香车路”的数据显示在“玉秀路”前面,示例如下:
address:*香车路*^2 address:*玉秀路*
# 或者
address:(*香车路*^4 OR *玉秀路*)
指定短语权重
使用 <query_clause>^=<score>
创建常量分数查询,这会将与该子句匹配的所有文档的整个子句设置为指定的分数。 当您只关心特定子句的匹配并且不希望其他相关性因素可以使用它。
(description:blue OR color:blue)^=1.0 text:shoes
Term 之间的操作符
Lucene 允许多个 Term 之间通过 Boolean 逻辑操作符进行连接。Lucene 支持的逻辑操作符有 AND
、 +
、 OR
、 NOT
、 -
,注意:所有 Boolean 操作符必须大写。
OR
:Lucene 默认使用 OR 操作符连接多个 Term,所以下列写法完全等价:
address:(香车路 玉秀路 清湖路)
address:(香车路 OR 玉秀路 OR 清湖路)
AND
:表示同时包含左右两个 Term 的索引文档+
:用于匹配文档中必须包含指定的 Term
#查询地址中包含"上海"或者"玉秀路"或"清湖路"的索引文档,其中上海必须包含
address:(+*上海* *玉秀路* *清湖路*)
NOT
:用于排除包含指定 Term 的索引文档
#查询 tag 中包含 34 但不包含 38,5,4,10 的索引文档
tag:(34 NOT (38 5 4 10))
-
:用于表示匹配文档中必须不包含指定的 Term
转义字符
需要注意的是,Lucene 查询时以下字符需要转义:
+ - && || ! ( ) { } [ ] ^ " ~ * ? : \
比如说你要查询包含“(1+1=2)”的索引文档:
\(1\+1\=2\)
Solr 的标准查询语法解析器
Solr Standard Query Parser 是 Solr 的标准查询解析器,也是 Solr 默认使用的查询解析器,它继承至 Lucene 的 Query Parser,因此 Lucene 的查询表达式语法全部适用于使用 Solr 标准查询解析器的 Solr。 Solr 标准查询解析器支持如下表格参数
示例 | 解释 |
---|---|
q | 根据 q 参数值构建一个查询,q 参数值必须符合 Solr 标准查询解析器支持的语法,此参数是必须指定的 |
q.op | 用于指定 boolean 操作符,可选值有 AND/OR,默认值为 OR。你可以在 schema.xml 中配置默认的 boolean 操作符 |
df | 用于指定查询的默认域,当查询文本未指定查询域,那么会使用默认域,你同样可以在 schema.xml 中配置默认域 |
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

上一篇: Solr 查询字段为空的数据
下一篇: 谈谈自己对于 AOP 的了解
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论