lucene搜索深入实战进阶_第1页
lucene搜索深入实战进阶_第2页
lucene搜索深入实战进阶_第3页
lucene搜索深入实战进阶_第4页
lucene搜索深入实战进阶_第5页
已阅读5页,还剩4页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

北风网项目培训讲师:tom5(北风网)第十二讲Lucene搜索深入实战进阶续一Lucene提供了丰富的API来组合定制你所需要的查询器,同时也可以利用

Query

Parser提供的强大的查询语法解析来构造你想要的查询器。本文章详细的介绍了Lucene的查询语法。通过Java语法分析器把一个查询字符串解析成

Lucene的查询器。在你选择使用Query

Parser前,请考虑以下事项:如果你打算在程序中拼接查询语法串然后再利用QueryParser转换,那么强烈建议你利用相应的API来自己构造查询器。也就是说,QueryParser是为手工输入高级查询设计的,而不是为程序拼接语法串而设计的。不分词的字段也最好通过相应的API添加到查询器中,而不是通过QueryParser。QueryParser使用的Analyser分析器,作用是将用户手工输入的文本转化为相应的Term。如果一个字段的值是通过程序生成的(例如日期字段,关键词字段等),那么在查询的时候也应该保持前后一致,利用程序生成相应的格式来查询。在查询的目标中,如果字段全部是程序生成的文本,(例如补齐的日期字段等),最好使用QueryParser以便查询的时候也是一致的格式。至于其它的,例如日期范围查询,关键字查询等,最好调用相应的API来构建查询器。目标字段中如果仅仅拥有有限的枚举值时,最好通过下拉列表提供给用户选择,然后利用TermQuery添加到查询器中,而不是而其拼接到查询字符串然后利用Query

Parser来解析。Terms一个查询将分解为若干Term以及操作符,有两种Term,其一是单一Term,其二为短语。单一Term是经过分析器分词后的最小单元,他就是一个简单的词,例如“Test”和“Hello”。短语则是一组被双引号括起来的一组词,例如:“Hellodolly”,多个Term可以通过布尔操作合并在一个更加复杂的查询器中。注意:一般来说,创建索引的分析器和查询的分析器最好保持一致(当然也有特殊情况,比如单字索引,分词组合查询),所以选择一个不会干扰查询词的分析器是很重要的。代码实战:TermsQueryParserDemo.java二、Term操作符Booleanoperators布尔操作符可以将多个Term合并为一个复杂的逻辑查询。Lucene支持AND,+,OR,NOT,-作为操作符号。注意,所有的符号必须为大写。OROR操作符默认的连接操作符。这意味着,当没有给多个Term显式指定操作符时,将使用OR,只要其中一个Term含有,则可以查询出文档,这跟逻辑符号||的意思相似。假设我们查询一个文档含有“quick dog”或者“dog”时,我们可以使用如下语法:“quick dog”

dog

或者“quick dog"

OR

dogANDAND操作符规定必须所有的Term都出现才能满足查询条件,这跟逻辑符号

&&意思相似。如果我们要搜索一个文档中同时含有“the

quick”和“lazy

dog”,我们可以使用如下语法:\"the

quick\"

AND

\"lazydog\"++操作符规定在其后的Term必须出现在文档中,也就是查询词中的MUST属性。举个例子来说,当我们要查询一个文档必须包含“quick”,同时可以包含也可以不包含“dog”时,我们可以使用如下语法:+quick

-dogNOTNOT操作符规定查询的文档必须不包含NOT之后的Term,这跟逻辑符号中的!相似。当我们要搜索一篇文档中必须含有“the

quick”同时不能含有“lazydog”时,我们可以使用如下查询;\"the

quick\"

NOT

\"lazy

dog\"注意:NOT操作符不能使用在单独Term中,举例来说,以下查询将返回无结果:NOT"lazy

dog“--操作符排除了包含其后Term的文档,跟NOT有点类似,假设我们要搜索

“the

quick”但不包含“lazy

dog”时,我们使用如下语法:\"the

quick\"

-\"lazy

dog\"GroupingLucene支持使用圆括号来将查询表达式分组,这将在控制布尔控制查询中非常有用。举例来说:当搜索必须含有“quick”,另外必须含有“dog”和“cat”之一,我们可以用如下语法:(dog

OR

cat)

AND

quick这种语法对消除歧义,确保查询表达式的正确性具有很大的意义。Field

GroupingLucene支持对字段用圆括号来进行分组,当我们要查询标题中含有“quick”但不包含“dog”时,我们可以使用如下语法:f:(+quick

-dog)Escaping

Special

CharactersLucene支持转义查询中的特殊字符,以下是Lucene的特殊字符清单:+

-

&&

||

!

(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论