//初始化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.tkk7.com/szhswl
------------------------------------------------------------------------------------------------------ ----------------- ---------
posted on 2007-12-10 19:51
宋針還 閱讀(651)
評論(0) 編輯 收藏 所屬分類:
搜索引擎