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索引构建逻辑模块分析
下一篇:第一节 全文检索系统与Lucene简介
最新评论共有 0 位网友发表了评论 , 查看所有评论
发表评论( 不能超过250字,需审核,请自觉遵守互联网相关政策法规。 )
匿名?
数据挖掘网站导航 数据挖掘论坛导航
  • 数据挖掘工具
  • 数据挖掘论坛
  • DataCruncher - Cognos
  • MineSet - MathSoft
  • Intelligent Miner - GainSmarts
  • Sqlserver - SAS - Clementine
  • CART - Weka - WizSoft
  • NeuroShell - ModelQuest
  • data mining tools - Darwin
  • 数据挖掘交友
  • 数据挖掘博客
  • 数据挖掘工具
  • 数据挖掘资源
  • 数据挖掘技术算法
  • 数据挖掘相关期刊、会议
  • 研究院联盟合作专区
  • 数据挖掘基础与相关技术
  • 数据挖掘厂商与就业
  • 数据挖掘研究者乐园
  • 知名厂商数据挖掘工具资料
  • 国内数据挖掘实验室
  • Foreign Data Mining Lab
  • 热点关注
  • Larbin网站爬虫简明使用说明
  • 全文检索引擎Lucene源码分析-analysis包
  • Nutch爬虫工作流程及文件格式详细分析
  • Lucene 基础指南(Java版)
  • 关于lucene 结构及内层的研究(一)
  • 实现NUTCH中文分词的代码修改方法
  • 利用Lucene搜索Java源代码
  • Lucene In Action ch 5 笔记 --高级搜索技
  • 第三节 Lucene索引文件格式分析
  • 如何使用Lucene进行全文检索(一)
  • 论坛最新话题
  • Foundations of Statistical Natural Langu
  • Game Theory meet Data Mining: A Recent P
  • System Building: How does it help or hin
  • 数据挖掘与Clementine培训
  • 新手报到
  • 求 SASEM 客户流失预测分析
  • 数据挖掘工程师/搜索研究院—北京——无线
  • 数据挖掘入门介绍(如何着手数据挖掘)
  • Information Overload Survey Results
  • The INEX 2005 Workshop on Element Retrie
  • 相关资讯
  • 什么是luncene
  • 什么是nutch
  • 让Nutch支持中文分词
  • 关于lucene 结构及内层的研究(一)
  • Lucene In Action ch 5 笔记 --高级搜索技
  • 第三节 Lucene索引文件格式分析
  • 第二节 Lucene系统结构分析
  • 第一节 全文检索系统与Lucene简介
  • Lucene的查询语法!
  • 第四节 Lucene索引构建逻辑模块分析
  • 数据挖掘实验室资料
  • 数据挖掘博客地址
  • 数据挖掘实验室网站地址
  • Prepare for Medicare audits by using dat
  • 注册成为SAS用户与爱好者俱乐部会员
  • 水南梅
  • 明日烟
  • 新人报道
  • 下载
  • 厦门服务器托管,450元/月—0592-5177319 高
  • 买空间送域名--0592-5177319 高静