我用的是lucene2.2.0,
最近要做一個(gè)站內(nèi)的全文檢索功能,下面把實(shí)現(xiàn)的代碼貼出來(lái),實(shí)現(xiàn)了索引的創(chuàng)建、檢索和刪除功能,并可以從檢索結(jié)果去查詢數(shù)據(jù)庫(kù)~ .我主要是我系統(tǒng)的700W數(shù)據(jù)進(jìn)行檢索.下面主要是供應(yīng)信息做為例子,(如有問(wèn)題,多多評(píng)論,虛心接受).
// 創(chuàng)建索引
IndexWriter writer;
String indexDir = "d:""index/sellindex";
boolean indexExist = indexExist(indexDir);
if (indexExist) {
writer = new IndexWriter(indexDir, new StandardAnalyzer(),
false);
} else {
writer = new IndexWriter(indexDir, new StandardAnalyzer(), true);
}
re為數(shù)據(jù)記錄集,這里就不介紹了.
while (re.next()) {
//Field.Store.YES表示是不是被保存,
//Field.Index.no表示是不是被索引.
doc.add(new Field("vcsid", re.getString("vcsid"),
Field.Store.YES, Field.Index.no));
//vcareacode是我的地區(qū)編號(hào),因?yàn)槲宜阉饕鳛闂l件搜索.
doc.add(new Field("vcareacode", re.getString("vcareacode"),
Field.Store.YES, Field.Index.TOKENIZED));
//這里isort后面排序用的
doc.add(new Field("isort", re.getString("isort"),
Field.Store.YES, Field.Index.TOKENIZED));
//clcontent是我的內(nèi)容,因?yàn)槲宜阉饕鳛闂l件搜索.
doc.add(new Field("clcontent", re.getString("clcontent"),
Field.Store.YES, Field.Index.TOKENIZED));
writer.addDocument(doc);
}
如果記錄較多時(shí),就循環(huán)添加
最后
writer.close();
判斷索引存在方法
public static boolean indexExist(String indexDir) {
return IndexReader.indexExists(indexDir);
}
這樣就在索引就建好了.
// 索引搜索的實(shí)現(xiàn)(我這里已搜索內(nèi)容和地區(qū))
IndexSearcher indexSearcher;
ndexSearcher = new IndexSearcher("d:""index/sellindex");
Document doc = null;
org.apache.lucene.search.BooleanQuery bquery=new org.apache.lucene.search.BooleanQuery();
//我這里clcontent作為關(guān)鍵字來(lái)搜索
QueryParser qa=new QueryParser("clcontent",new StandardAnalyzer());
Query query=qa.parse(keyword);
//這里指定條件都滿足搜索
bquery.add(query,org.apache.lucene.search.BooleanClause.Occur.MUST);
// vcareacode作為條件來(lái)查詢,如果為NULL和 AA時(shí)表示查找所有的
if(request.getParameter("vcareacode")!=null){
if(!request.getParameter("vcareacode").toString().equals("aa")){
qa=new QueryParser("vcareacode",new StandardAnalyzer());
query=qa.parse(request.getParameter("vcareacode")+"*");
bquery.add(query,org.apache.lucene.search.BooleanClause.Occur.MUST);
vcareacode=request.getParameter("vcareacode");
}
}"
//這里加的是高亮結(jié)果顯示
Highlighter highlighter = new Highlighter(new SimpleHTMLFormatter("<font color=red><B>","</B></font>"),new QueryScorer(bquery));
highlighter.setTextFragmenter(new SimpleFragmenter(80));
org.apache.lucene.document.Document dc=null;
Hits hits = indexSearcher.search(bquery,new Sort(new SortField("isort",true)));
org.apache.lucene.analysis.standard.StandardAnalyzer analyzer = new org.apache.lucene.analysis.standard.StandardAnalyzer();
//這里hits.length()可以得到有多少記錄.,I表示第幾條記錄
dc = hits .doc(i);
//高亮顯示類容
org.apache.lucene.analysis.TokenStream tokenStream = analyzer.tokenStream("clcontent", new java.io.StringReader(dc.get("clcontent")));
System.out.pritf(highlighter.getBestFragment(tokenStream,li.doc(i).get("clcontent"))) ;
dc.get("vcareacode")顯示類別
這樣就可以從建索引,到搜索.(有問(wèn)題,發(fā)表下評(píng)論,我會(huì)回的)這只是簡(jiǎn)單的,我也在苦研中,要睡了,還要上班,有時(shí)間會(huì)寫下更新索引,增加,刪除,修改,還有一些優(yōu)化方法..
青菜貓(孫宇)
posted on 2007-10-22 23:33
青菜貓(孫宇) 閱讀(1522)
評(píng)論(11) 編輯 收藏 所屬分類:
搜索