Lucene的查询语法
Lucene提供了方便您创建自建查询的API,也通过QueryParser提供了强大的查询语言。
本文讲述Lucene的查询语句解析器支持的语法,Lucene的查询语句解析器是使用JavaCC工具生成的词法解析器,它将查询字串解析为Lucene
Query对象。
项(Term)
一条搜索语句被拆分为一些项(term)和操作符(operator)。项有两种类型:单独项和短语。
单独项就是一个单独的单词,例如"test"
, "hello"。
短语是一组被双引号包围的单词,例如"hello
dolly"。
多个项可以用布尔操作符连接起来形成复杂的查询语句(接下来您就会看到)。
注意:Analyzer建立索引时使用的解析器和解析单独项和短语时的解析器相同,因此选择一个不会受查询语句干扰的Analyzer非常重要。
域(Field)
Lucene支持域。您可以指定在某一个域中搜索,或者就使用默认域。域名及默认域是具体索引器实现决定的。
您可以这样搜索域:域名+":"+搜索的项名。
举个例子,假设某一个Lucene索引包含两个域,title和text,text是默认域。如果您想查找标题为"The
Right Way"且含有"don't go this way"的文章,您可以输入:
title:"The Right Way" AND
text:go
或者
title:"Do it right" AND
right
因为text是默认域,所以这个域名可以不写出。
注意:域名只对紧接于其后的项生效,所以
title:Do
it
right
只有"Do"属于title域。"it"和"right"仍将在默认域中搜索(这里是text域)。
项修饰符(Term
Modifiers)
Lucene支持项修饰符以支持更宽范围的搜索选项。
用通配符搜索
Lucene支持单个与多个字符的通配搜索。
使用符号"?"表示单个任意字符的通配。
使用符号"*"表示多个任意字符的通配。
单个任意字符匹配的是所有可能单个字符。例如,搜索"text或者"test",可以这样:
te?t
多个任意字符匹配的是0个及更多个可能字符。例如,搜索test,
tests 或者
tester,可以这样:
test*
您也可以在字符窜中间使用多个任意字符通配符。
te*t
注意:您不能在搜索的项开始使用*或者?符号。
模糊查询
Lucene支持基于Levenshtein
Distance与Edit
Distance算法的模糊搜索。要使用模糊搜索只需要在单独项的最后加上符号"~"。例如搜索拼写类似于"roam"的项这样写:
roam~
这次搜索将找到形如foam和roams的单词。
注意:使用模糊查询将自动得到增量因子(boost
factor)为0.2的搜索结果.
邻近搜索(Proximity
Searches)
Lucene还支持查找相隔一定距离的单词。邻近搜索是在短语最后加上符号"~"。例如在文档中搜索相隔10个单词的"apache"和"jakarta",这样写:
"jakarta
apache"~10
Boosting a Term
Lucene provides the relevance
level of matching documents based on the terms found. To boost a term use the
caret, "^", symbol with a boost factor (a number) at the end of the term you are
searching. The higher the boost factor, the more relevant the term will
be.
Lucene可以设置在搜索时匹配项的相似度。在项的最后加上符号"^"紧接一个数字(增量值),表示搜索时的相似度。增量值越高,搜索到的项相关度越好。
Boosting
allows you to control the relevance of a document by boosting its term. For
example, if you are searching for jakarta apache and you want the term "jakarta"
to be more relevant boost it using the ^ symbol along with the boost factor next
to the term. You would type:
通过增量一个项可以控制搜索文档时的相关度。例如如果您要搜索jakarta
apache,同时您想让"jakarta"的相关度更加好,那么在其后加上"^"符号和增量值,也就是您输入:
jakarta^4
apache
This will make documents with the term jakarta appear more
relevant. You can also boost Phrase Terms as in the
example:
这将使得生成的doucment尽可能与jakarta相关度高。您也可以增量短语,象以下这个例子一样:
"jakarta
apache"^4 "jakarta lucene"
By default, the boost factor is 1. Although,
the boost factor must be positive, it can be less than 1 (i.e.
.2)
默认情况下,增量值是1。增量值也可以小于1(例如0.2),但必须是有效的。
布尔操作符
布尔操作符可将项通过逻辑操作连接起来。Lucene支持AND,
"+", OR, NOT 和
"-"这些操作符。(注意:布尔操作符必须全部大写)
OR
OR操作符是默认的连接操作符。这意味着如果两个项之间没有布尔操作符,就是使用OR操作符。OR操作符连接两个项,意味着查找含有任意项的文档。这与集合并运算相同。符号||可以代替符号OR。
搜索含有"jakarta
apache" 或者 "jakarta"的文档,可以使用这样的查询:
"jakarta apache"
jakarta
或者
"jakarta apache" OR
jakarta
AND
AND操作符匹配的是两项同时出现的文档。这个与集合交操作相等。符号&&可以代替符号AND。
搜索同时含有"jakarta
apache" 与 "jakarta lucene"的文档,使用查询:
"jakarta apache" AND "jakarta
lucene"
+
"+"操作符或者称为存在操作符,要求符号"+"后的项必须在文档相应的域中存在。
搜索必须含有"jakarta",可能含有"lucene"的文档,使用查询:
+jakarta
apache
NOT
NOT操作符排除那些含有NOT符号后面项的文档。这和集合的差运算相同。符号!可以代替符号NOT。
搜索含有"jakarta
apache",但是不含有"jakarta lucene"的文档,使用查询:
"jakarta apache" NOT "jakarta
lucene"
注意:NOT操作符不能单独与项使用构成查询。例如,以下的查询查不到任何结果:
NOT "jakarta
apache"
-
"-"操作符或者禁止操作符排除含有"-"后面的相似项的文档。
搜索含有"jakarta
apache",但不是"jakarta lucene",使用查询:
"jakarta apache" -"jakarta
lucene"
分组(Grouping)
Lucene支持使用圆括号来组合字句形成子查询。这对于想控制查询布尔逻辑的人十分有用。
搜索含有"jakarta"或者"apache",同时含有"website"的文档,使用查询:
(jakarta
OR apache) AND
website
这样就消除了歧义,保证website必须存在,jakarta和apache中之一也存在。
转义特殊字符(Escaping
Special Characters)
Lucene支持转义特殊字符,因为特殊字符是查询语法用到的。现在,特殊字符包括
+ -
&& || ! ( ) { } [ ] ^ " ~ * ? :
/
转义特殊字符只需在字符前加上符号/,例如搜索(1+1):2,使用查询
/(1/+1/)/:2
分享到:
相关推荐
lucene多样化查询参数demo示范,以及高级查询string构建。
lucene的查询语法事例.
用到的工具 jsoup+spring+struct+DButil+mysql+lucene 可以配置采集网站的图片,包含分组统计,相同数据合并功能,主要是给群内成员来个demo,让大家有个学习的demo 小试牛刀、临时写的,莫吐槽 需要用到mysql...
24 Lucene学习总结之八:Lucene的查询语法,JavaCC及QueryParser(1)
lucene.NET使用教程整合 lucene.NET使用教程整合 lucene.NET使用教程整合 lucene.NET使用教程整合 lucene.NET使用教程整合 lucene.NET使用教程整合
Tripod介绍Tripod用于对文本数据的实时匹配分析,其语法主要兼容了lucene语法,并做了微调。在很多文本处理的应用中,会有类似数据订阅的需求,即将客户关注的数据推送给客户。一种典型的实现是,我们会根据用户...
lucene表达式查询示例和表达式语法详解
Java使用 lucene-core-8.7.0 实现全文检索等功能
js-solr-highlighter 一个JavaScript库,用于基于lucene / solr查询语法中的查询突出显示HTML文本在浏览器或Node.js环境中运行基于和构建一般的突出显示过程为: 使用Lucene语法从查询中得出要突出显示的文本突出...
xLucene-可扩展Lucene查询语法解析器和执行器 源代码:()-() 文档:( )-( ) 其他-各种配套 贡献 欢迎提出请求。 对于重大更改,请先打开一个问题以讨论您要更改的内容。 请确保适当更新测试。 执照 。 ...
把用户输入的查询字符串封装成Lucene能够识别的Query对象。 3) Filter: 用来过虑搜索结果的对象。 4) TopDocs: 代表查询结果集信息对象。它有两个属性: a) totalHits: 查询命中数。 b) scoreDocs: 查询结果信息...
luqum - Python 中的 lucene 查询解析器,使用 PLY “luqum”(如在 LUcene QUery Manipolator 中)是一种用于解析在编写的并构建抽象语法树以检查、分析或以其他方式操作搜索查询的工具。 它可以丰富 Lucene Query ...
尽管Amazon Cloudsearch的2011 API版本不支持Lucene,但更新的2013 API修订版本本机支持Lucene样式查询,因此,除了尚未升级到新API版本的使用者之外,不需要此库。 概述 l2cs “ lucene到CloudSearch”-是用于将...
6) queryParser模块:负责查询语句的语法分析。提供了解析查询语句的QueryParser类 7) util模块:包含一些公共工具类。 5. 创建索引 1) IndexWriter:索引写出器 a) 构造方法: IndexWriter(Directory d, ...
lucene的下载安装和相关的索引创建,分词查询等等,查询语法和IK中文分词解析器的使用
Lucene与SQL对比学习,适用于新手
lucene分析,介绍了lucne建立索引以及查询的过程,包括语法分析器,过滤器,切词器,有想了解lucene的同学可以从中获取到自己想要的东西
支持Lucene的查询语法描述 支持各种文本标记器 支持多种语言的多种词干 文本输出是彩色的或由可自定义标签分隔 支持将文件名打印为超链接,以供单击以打开(检查对您的终端的支持) 文本输出支持模板 评分模式...
代码涉及sqlserver已改为mysql语法规则 经过对搜索引擎的研究同时与Lucene自身的特性相结合,搜索引擎的设计与实现需要实现的功能阐述如下: (1)支持桌面文件搜索,格式包括txt、doc、xls和ppt; (2)支持分词...
Lucene.Net 源搜索引擎源代码 使用说明: 一、在IIS上建立虚拟目录,指向web 二、Web\Data\Config.xml 配置索引目录 三、运行Web\Data\IndexFiles.exe 建立文件索引(自己也可以写一个批处理,定时更新索引) 四、...