首页 > java > lucene3.0中检索方法的使用介绍

lucene3.0中检索方法的使用介绍

2009年12月17日 发表评论 阅读评论
  QueryParser是一个非常通用的帮助类,他的作用是把用户输入的文本转换为内置的Query对象(大多数web搜索引擎都提供一个查询输入框来让用户输入查询条件)。QueryParser内置提供了很多语法使可以使用输入的各种高级条件的 Query。为了保证查询的正确性,最好用创建索引文件时同样的分析器。QueryParser解析字符串时,可以指定查询域,实际可以在字符串中指定一个或多个域。
QueryParser调用静态方法Parse后会返回Query的实例,原子查询。例如:“title:电视台 source:亲亲宝宝”会返回BooleanQuery,“title:电视台”或“电视台”会返回PhraseQuery,“台”会返回TermQuery。 
“title:电视台 site:亲亲宝宝” 查询标题为电视台 或者来源是亲亲宝宝
“+title:电视台 site:亲亲宝宝” 查询标题必须包含电视台,来源是亲亲宝宝
“-title:电视台 site:亲亲宝宝” 查询标题不能包含电视台,来源是亲亲宝宝
根据这个,可以做类似google,百度的在一个输入框中实现多字段查询,具体使用方法如下:

String field = "contents";

QueryParser parser = new QueryParser(Version.LUCENE_CURRENT, field,analyzer);

Query query = parser.parse(str);

Term是搜索的基本单元。与Field对象类似,它由一对字符串元素组成:字段的名称和字段的值。注意Term对象也和索引过程有关。但是它们是由Lucene内部生成,所以在索引时你一般不必考虑它们。在搜索时,你可能创建Term对象并与TermQuery同时使用

Query q = new TermQuery(new Term(“contents”, “lucene”));

Lucene内建Query对象 
TermQuery:词条查询。通过对某个词条的指定,实现检索索引中存在该词条的所有文档。 
BooleanQuery:布尔查询。Lucene中包含逻辑关系:“与”,“或”,“非”的复杂查询,最终都会表示成BooleanQuery。布尔查询就是一个由多个子句和子句之间组成的布尔逻辑所组成的查询。 
RangeQuery:范围查询。这种范围可以是日期,时间,数字,大小等等。 
PrefixQuery:前缀查询。 
PhraseQuery:短语查询。默认为完全匹配,但可以指定坡度(Slop,默认为0)改变范围。比如Slop=1,检索短语为“电台”,那么在“电台”中间有一个字的也可以被查找出来,比如“电视台”。 
MultiPhraseQuery:多短语查询。 
FuzzyQuery:模糊查询。模糊查询使用的匹配算法是levensh-itein算法。此算法在比较两个字符串时,将动作分为3种:加一个字母(Insert),删一个字母(Delete),改变一个字母(Substitute)。 
WildcardQuery:通配符查询。“*”号表示0到多个字符,“?”表示单个字符。 
SpanQuery:跨度查询。此类为抽象类。 
SpanTermQuery:检索效果完全同TermQuery,但内部会记录一些位置信息,供SpanQuery的其它API使用,是其它属于SpanQuery的Query的基础。 
SpanFirstQuery:查找方式为从Field的内容起始位置开始,在一个固定的宽度内查找所指定的词条。 
SpanNearQuery:功能类似PharaseQuery。SpanNearQuery查找所匹配的不一定是短语,还有可能是另一个SpanQuery的查询结果作为整体考虑,进行嵌套查询。 
SpanOrQuery:把所有SpanQuery查询结果综合起来,作为检索结果。 
SpanNotQuery:从第一个SpanQuery查询结果中,去掉第二个SpanQuery查询结果,作为检索结果。 
分类: java 标签: , , 3,915 次阅读
原文链接:http://www.wenhq.com/article/view_409.html
欢迎转载,请注明出处:亲亲宝宝
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.