Lucene 的基本查询语法

发布于 2024-04-02 09:19:09 字数 4396 浏览 29 评论 0

多域联合查询

如果希望查询 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:* :匹配存在的值,包括 NaN
  • field:[* 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+ORNOT- ,注意:所有 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

梦途

暂无简介

文章
评论
26 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文