lucene的检索方式

1 篇文章 0 订阅
[size=large]Lucene 简介[/size]
[size=medium]Lucene 是一个基于 Java 的全文信息检索工具包,它不是一个完整的搜索应用程序,而是为你的应用程序提供索引和搜索功能。Lucene 目前是 Apache Jakarta 家族中的一个开源项目。也是目前最为流行的基于 Java 开源全文检索工具包。[/size]

[color=darkred][size=large]主要有以下几种方式检索[/size][/color]

[size=large]TermQuery[/size]

这个检索通常查找文档中唯一数据的字段(在更新索引时特别有用),一般这个字段使用Field.Index.NOT_ANALYZED方式保存索引(但并不意味着所有Field.Index.NOT_ANALYZED方式保存索引的字段有唯一值).

Term t = new Term("contents", "java");
Query query = new TermQuery(t);
//最终表达式就是contents:java

[size=large]TermRangeQuery[/size]

范围检索,可以返回在两个单词之间的数据.

TermRangeQuery query = new TermRangeQuery("title", "d", "j", true, true);
//或者
TermRangeQuery query = new TermRangeQuery("title", "tim", "tom", true, true);
//最终表达式就是title:[d TO j]

[size=large]NumericRangeQuery[/size]

数字范围检索,可以返回在两个数字直接的数据.在建索引时,该字段必须是以数字方式建的.并且创建时和检索时的使用的数字类型要相同.

NumericRangeQuery query = NumericRangeQuery.newIntRange("pubmonth",198805,198810,true,true);
//最终表达式就是pubmonth[198805 TO 198810]

[size=large]PrefixQuery[/size]

前缀检索,就像数据库里的LIKE 'abc%'一样.普遍用于产品分类,不确定单词等.

Term term = new Term("category", "/technology/computers/programming");
//或者
Term term = new Term("title", "can");
PrefixQuery query = new PrefixQuery(term);
//最终表达式就是title:can*


[size=large]BooleanQuery[/size]

布尔检索,对两个Query进行逻辑运算.选项有BooleanClause.Occur.MUST, BooleanClause.Occur.SHOULD 和 BooleanClause.Occur.MUST_NOT.

TermQuery searchingBooks = new TermQuery(new Term("subject","search")); //A 检索subject中有search的
Query books2004 = NumericRangeQuery.newIntRange("pubmonth", 200401, ,200412,true, true); //B 检索出版时间范围
BooleanQuery searchingBooks2004 = new BooleanQuery(); //用于最终合并的检索
searchingBooks2004.add(searchingBooks, BooleanClause.Occur.MUST); //必须有A检索的结果
searchingBooks2004.add(books2004, BooleanClause.Occur.MUST);//必须有B检索的结果
//最终表达式就是+subject:search +pubmonth[200401 TO 200412]


[size=large]PhraseQuery[/size]

短语检索,可以检索一个短语或词组.可以设置单词间隔距离,默认是1

PhraseQuery query = new PhraseQuery(); // 创建短语Query
query.setSlop(slop); // 设置间隔
for (int i=0; i < phrase.length; i++) {
query.add(new Term("field", phrase[i])); // 增加短语
}
//最终表达式就是title:"sloppy phrase"~5 ~5表示间隔


[size=large]WildcardQuery[/size]

通配符检索,可以使用?,*这些通配符进行检索.?代表一个字符,*代表多个字符.(注意在单词开头使用通配符会严重影响效率)

Query query = new WildcardQuery(new Term("contents", "?ild*"));
//最终表达式就是contents:?ild*


[size=large]FuzzyQuery[/size]

模糊检索,可以检索相似的词.比如wuzza和fuzzy.(模糊检索也会影响效率)

Query query = new FuzzyQuery(new Term("contents", "wuzza"));
//最终表达式就是contents:wuzza~0.5


[size=large]MatchAllDocsQuery[/size]

匹配全部文档,顾名思义就是匹配全部文档的意思.

Query query = new MatchAllDocsQuery(field);
//最终表达式就是*:*


参考 http://www.cnblogs.com/rohan/archive/2010/09/02/1816278.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值