lucene4 query

lucene 查询器Query
 
1、TermQuery 匹配文档包含的一个词(term).它可以跟其它词条进行组合,然后用BooleanQuery和包装
Term term = new Term("keyword","饭店");
Term term2 = new Term("keyword","大");
		
Query query1 = new TermQuery(term);
Query query2 = new TermQuery(term2);
		
BooleanQuery query = new BooleanQuery();
query.add(query1,Occur.SHOULD);
query.add(query2,Occur.SHOULD);
  最终的查询语句为"keyword:大 keyword:饭店",相当于两个词条组合成新的或关系。
 
2、BooleanQuery 匹配文档是否包含 queries,同TermQuery,PhraseQuery以及其它BooleanQuery组合使用。默认最大包含分项为1024,可以更改
 
BooleanClause是BolleanQuery的查询关系:MUST : "+"  SHOULD:"" MUST_NOT:"-" 分别代表与或非三种关系也可以直接用+,空格,-三种来表示。最终的查询语句都是这种表示法如第1个最终查询语句 "keyword:大 keyword:饭店", 表示或的关系。
 
BooleanQuery localBooleanQuery = new BooleanQuery();
int size = 0;
if (nidList != null) {
	size = nidList.size();
}
for (int i = 0; (i < size) && (i < 1024); i++) {
	Term localTerm = new Term("line_id", nidList.get(i));
	TermQuery localTermQuery = new TermQuery(localTerm);
	localBooleanQuery.add(localTermQuery, BooleanClause.Occur.SHOULD);
}
 
3、WildcardQuery 通配符查询,与其它查询类似,*代表多个字符,?代表单个字符.
一共有三个定义:wildcard_string='*',匹配任意字符序列,包括空;wildcard_char='?',匹配单个字符序列;wildcard_escape='\\',专门匹配\
query.add(new WildcardQuery(new Term(field, "*"+keyword+"*")), BooleanClause.Occur.MUST);
 
4、PhraseQuery 直接用来查询写好的语句,例如“new work”,查询包括“new”或者"work"的记录,这个查询器通常与BooleanQuery结合来一块使用。这个查询器中有最著名的slop属性,该属性是用来确定词与词之间的间隔个数,例如
setSlop(2),则代表new 和work之间可以隔两个不相干的词,如果不设置则默认为0。
Query query = parser.parse("中华共和国");
PhraseQuery pquery = (PhraseQuery)query;
pquery.setSlop(1);
 
5、PrefixQuery 前缀查询器,跟据Term的前缀来匹配。例如:App* ,查询以App开头的记录。
 
6、MultiPhraseQuery 多字段解析查询,跟PhraseQuery区别,在于多个字段。例如,在搜索Teram"Microsoft App*"的同时还可以加上“Microsoft”相当于prefix 使用 IndexReader.terms(Term), 和使用 MultiPhraseQuery.add(Term[]
 * terms) 增加到这个查询
7、FuzzyQuery 模糊查询,该类继承自MUltiPhraseQuery类
 
基本上分为两大类:普通查询和解析查询。4、6属于后者,派生出N多相关的查询类.其它的查询API......

猜你喜欢

转载自qxf567.iteye.com/blog/1984061
今日推荐