//初始化IndexSearcher
IndexSearcher search = new IndexSearcher(path);
//构建Term
Term term = new Term(fieldName,value);
//构建Query对象
Query q = new TermQuery(term);
//检索
Hits hits = search.search(q);
//显示查询结果
for(int i=0; i<hits.length(); i++)
{
System.out.println(hits.doc(i));
}
IndexSearcher的常用方法有
search(Query q);
search(Query q,Filter filter);
search(Query q,Sort sort);
search(Query q,Filter filter,Sort sort);
Hits的常用方法有
doc(i); //得到第i个Document
id(i); //得到第i个Document在lucene文件中的id号
length(); //结果集的数量
score(i); //第i个Doucment的文档得分,默认显示方式为score值越高,排得越前。score取值0-1之间
如果想提高score的值。可以有建立索引时设置,用Field.setBoost(Float f)方法
Field f = new Field(fieldname,value,store,tokenized);
f.setBoost(5f);
在lucene中,document ID 越小,查询时所需时间越短,因为Hits的内部缓存机制。
Lunece的常用搜索
一、TermQuery 词条搜索
Query query = new TermQuery(new Term(fieldname,value));
二、BooleanQuery 布尔搜索
建立二个TermQuery
Query q1 = new TermQuery(new Term(fieldname1,value1));
Query q2 = new TermQuery(new Term(fieldname2,value2));
建立BooleanQuery对象
BooleanQuery query = new BooleanQuery();
query.add(q1,BooleanClause.Occue.MUST);
query.add(q2,BooleanClause.Occue.MUST);
BooleanClause.Occue 有三个静态值
MUST,MUST_NOT,SHOULD
must&&must = (AnB)
must&&must_not = (A-(AnB))
should&&should = (AuB)
三、RangeQuery 范围搜索
RangeQuery query = new RangeQuery(begin,end,false);
begin = new Term(fieldname,value);
end = new Term(fieldname,value);
false 表示开区间 不包括 (begin,end) true 表示闭区间 包括 [begin,end]
四、PrefixQuery 前缀搜索
PrefixQuery query = new PrefixQuery(new Term(fieldname,value));
五、PhraseQuery 短语搜索
PhraseQuery query = new PhraseQuery();
query.add(new Term(fieldname,value));
query.add(new Term(fieldname,value));
还可以设置坡度,query.setSlop(int n),默认为0如查询“钢铁”,可以用
query.add(new Term(fieldname,”钢”));
query.add(new Term(fieldname,”铁”));
如想把“钢和铁”,“钢与铁”也查询出来。可以加上query.setSlop(1);
六、MultiPhraseQuery 多短语搜索
MultiPhraseQuery query = new MultiPharseQuery();
//加入短语的前缀
query.add(new Term(fieldname,value));
//加入短语的后缀
query.add(new Term[] {new Term(fieldname,value), new Term(fieldname,value)});
七、FuzzyQuery 模糊搜索
FuzzyQuery query = new FuzzyQuery(new Term(filed,value));
它的三个构造函数
FuzzyQuery(Term t);
FuzzyQuery(Term t,float 0.5f); 相似度。0-1之间
FuzzyQuery(Term t,float 0.5f,int prefixLength);前缀必须相同的长度
本文转自:http://job5156.xicp.net/?p=72
---------------------------------------------------------------------------------------------------------------------------------
说人之短,乃护己之短。夸己之长,乃忌人之长。皆由存心不厚,识量太狭耳。能去此弊,可以进德,可以远怨。
http://www.blogjava.net/szhswl
------------------------------------------------------------------------------------------------------ ----------------- ---------
posted on 2007-12-10 19:51
宋针还 阅读(638)
评论(0) 编辑 收藏 所属分类:
搜索引擎