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.ht

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来生成词法分析器和语法分析器的。

目录
相关文章
|
数据可视化 Linux iOS开发
(2024年)Typora-最新版安装(1.8.10)
Typora是一款高效、简洁且功能强大的Markdown编辑器,支持Windows、MacOS及Linux系统,并实现可视化编辑,同一窗口实时呈现编辑效果。相较于传统Markdown编辑器,Typora的界面更为直观易用,极大地提升了编辑效率。用户可在官网(https://typoraio.cn/)下载安装包进行安装。
1425 5
|
网络协议 Java 测试技术
配置中心原理和选型:Disconf、Apollo、Spring Cloud Config 和 Nacos
学完注册中心,再看配置中心这块,感觉简单很多,因为很多知识原理是相辅相成的
9783 0
配置中心原理和选型:Disconf、Apollo、Spring Cloud Config 和 Nacos
|
弹性计算 Ubuntu Linux
一键部署OpenWebUI+Ollama到阿里云ECS,轻松运行DeepSeek!(保姆级教程)
在当今数据驱动的时代,快速部署和管理大模型成为企业的关键需求。阿里云提供了一键部署OpenWebUI+Ollama的便捷方案,支持本地大模型运行和管理。用户也可以选择连接阿里云百炼的在线模型。
一键部署OpenWebUI+Ollama到阿里云ECS,轻松运行DeepSeek!(保姆级教程)
|
应用服务中间件 API nginx
|
存储 Kubernetes 调度
Kubernetes 中存储使用介绍(PV、PVC和StorageClass)
在 Kubernetes 中的应用,都是以 Pod 的形式运行的,当我们要是在 Kubernetes 上运行一些需要存放数据的应用时,便需要关注应用存放的数据是否安全可靠。因为 Pod 是有生命周期的,那么也就是说当 Pod 被删除或重启后,Pod 里面所运行的数据也会随之消失。
3135 0
Kubernetes 中存储使用介绍(PV、PVC和StorageClass)
|
存储 人工智能 运维
AI + 可观测最佳实践:让业务从“看见”到“洞察”
本文介绍了AI Ops的概念及其在提升系统运维效率、洞察力和可观测性方面的作用。主要内容分为三个部分:一是监控、观测与洞察的区别及挑战,强调了数据整合和语义对齐的重要性;二是AI与计算如何重塑可观测性,通过UModel数字图谱和多模态存储分析架构实现数据联通;三是最佳实践与未来展望,展示了阿里云AI Stack可观测解决方案的应用案例,并总结了可观测性的四个发展阶段,最终愿景是借助AI力量让每个人成为多领域的专家。
|
Java 开发工具 git
Local History里没记录??IDEA代码丢失的解决办法
Local History里没记录??IDEA代码丢失的解决办法
Local History里没记录??IDEA代码丢失的解决办法
|
C++ 计算机视觉
CV之FC:人脸识别之判断相似度极高的国内外明星根据人工智能算法(AP云)预测判别是否为同一个人
CV之FC:人脸识别之判断相似度极高的国内外明星根据人工智能算法(AP云)预测判别是否为同一个人
CV之FC:人脸识别之判断相似度极高的国内外明星根据人工智能算法(AP云)预测判别是否为同一个人
|
网络协议 应用服务中间件 nginx
nginx 转发 rtmp 直播流
nginx 转发 rtmp 直播流
1354 0
|
JSON 自然语言处理 固态存储
大神都这么做,让 Kibana 搜索语法 query string 也能轻松上手
kibana 的搜索框默认选择了 query string 的搜索语法,虽然简洁却不简单,本文来帮大家如何轻松上手;
18541 1
大神都这么做,让 Kibana 搜索语法 query string 也能轻松上手