Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4028924
  • 博文数量: 251
  • 博客积分: 11197
  • 博客等级: 上将
  • 技术积分: 6862
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-05 14:41
个人简介

@HUST张友东 work@taobao zyd_com@126.com

文章分类

全部博文(251)

文章存档

2014年(10)

2013年(20)

2012年(22)

2011年(74)

2010年(98)

2009年(27)

分类: 服务器与存储

2010-12-10 16:06:19

Lucene支持基于词条的TermQueryRangeQueryPrefixQueryBolleanQueryPhraseQueryWildcardQueryFuzzyQuery,另外lucene提供了功能强大的QueryParse用于从查询表达式中分析出查询请求。

 

1. TermQueryQueryParser

单个单词作为查询表达式时,它相当于一个单独的项。如果表达式是由单个单词构成,QueryParserparse()方法会返回一个TermQuery对象。

 

如查询表达式为:content:helloQueryParser会返回一个域为content,值为helloTermQuery

Query query = new TermQuery(“content”, “hello”).

 

2. RangeQueryQueryParser

QueryParse可以使用[起始 TO 终止]{起始 TO 终止}表达式来构造RangeQuery

 

如查询表达式为:time[20101010 TO 20101210] QueryParser会返回一个域为time,下限为20101010,上限为20101210RangeQuery

Term t1 = new Term(“time”, “20101010”);

Term t2 = new Term(“time”, “20101210”);

Query query = new RangeQuery(t1, t2, true);

 

3. PrefixQueryQueryParser

当查询表达式中短语以星号(*)结尾时,QueryParser会创建一个PrefixQuery对象。

 

如查询表达式为:contentluc*,则QueryParser会返回一个域为content,值为lucPrefixQuery.

Query query = new PrefixQuery(luc);

 

4. BooleanQueryQueryParser

当查询表达式中包含多个项时,QueryParser可以方便的构建BooleanQueryQueryParser使用圆括号分组,通过-+AND, ORNOT来指定所生成的Boolean Query

 

5. PhraseQueryQueryParser

QueryParser的分析表达式中双引号的若干项会被转换为一个PhraseQuery对象,默认情况下,Slop因子为0,可以在表达式中通过~n来指定slop因子的值。

 

如查询表达式为content:“hello world ~3,则QueryParser会返回一个域为content,内容为“hello world”,slop3的短语查询。

Query query = new PhraseQuery();

query.setSlop(3);

query.add(new Term(“content”, “hello”);

query.add(new Term(“content”, “world”);

 

6. WildcardQueryParser

    Lucene使用两个标准的通配符号,*代表0或多个字母,?代表01个字母。但查询表达式中包含*或?时,则QueryParser会返回一个WildcardQuery对象。但要注意的是,当*出现在查询表达式的末尾时,会被优化为PrefixQuery;并且查询表达式的首个字符不能是通配符,防止用户输入以通配符*为前缀的搜索表达式,导致lucene枚举所有的项而耗费巨大的资源。

 

6. FuzzyQueryQueryParser

QueryParser通过在某个项之后添加“~”来支持FuzzyQuery类的模糊查询。

   

    Lucene提供的QueryParser是搜索引擎中重要的一个环节,如当我们使用Google等搜索引擎时,当我们往搜索框中输入查询表达式后,Google的引擎会先对我们的输入进行分析,并产生相应的内部查询,这也就是为什么goole有一系列的搜索技巧了。

 

Google的搜索技巧与Lucene的查询类比

 

1. 基本搜索(类比Termquery)。

2. 搜索两个及两个以上关键字,搜索结果不包含某些特定信息(类比BooleanQuery)。

3. 整词的搜索(使用引号,类比PhraseQuery)。

4. 使用filetype:xxx限定搜索文件类型。

5. 使用site:xxx限定搜索的网站范围。

6. 使用intitle:xxx, inurl:xxx, intext:xxx来限定搜索域。

 

阅读(7999) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~