Lucene 的检索方式

jing31 发布于 2010/11/25 09:43
阅读 454
收藏 1

TermQuery

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

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

TermRangeQuery

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

1 TermRangeQuery query = new TermRangeQuery("title""d""j"truetrue);
2 //或者
3 TermRangeQuery query = new TermRangeQuery("title""tim""tom"truetrue);
4 //最终表达式就是title:[d TO j]

NumericRangeQuery

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

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

PrefixQuery

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

1 Term term = new Term("category""/technology/computers/programming");
2 //或者
3 Term term = new Term("title""can");
4 //最终表达式就是title:can*

BooleanQuery

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

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

PhraseQuery

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

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

WildcardQuery

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

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

FuzzyQuery

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

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

MatchAllDocsQuery

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

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

 

介绍的还不错,有一个概况的认识,大家可以看看。

加载中
返回顶部
顶部