關于這個內(nèi)容javaeye已經(jīng)有不錯的例子了
http://jnotnull.javaeye.com/blog/275327
在這個例子的基礎上我想說一一些需要注意的地方。
1.重建索引和增量索引:
IndexWriter writer = new IndexWriter(directory,analyzer,rebuild,new IndexWriter.MaxFieldLength(200000));
只需要在構造IndexWriter的時候設置rebuild值就可以了
當rebuild設為true的時候:就會刪除原來的索引,重建索引文件
當rebuild設為false時:表示增量索引,是在原來索引文件的基礎上增加新的索引內(nèi)容,當然第一次沒有索引文件的時候必須先重建索引生成索引文件。
在lucene2.4中不使用
Field.Index.TOKENIZED而是使用Field.Index.ANALYZED,表示要對這個field進行分詞
if(article.getArticleId()!=null)
doc.add(new Field(Fields.FIELD_ARTICLEID,article.getArticleId(),Field.Store.YES,Field.Index.NOT_ANALYZED));
if(article.getTitle()!=null)
doc.add(new Field(Fields.FIELD_TITLE,article.getTitle(),Field.Store.YES,Field.Index.ANALYZED));
當然這里的
Fields.FIELD_ARTICLEID是自定義的類變量
2.分頁檢索
ScoreDoc[] hits = searcher.search(query,null,startIndex+perPage,new Sort(new SortField(Fields.FIELD_CHECKTIME,SortField.AUTO,true))).scoreDocs;
int numTotalHits = searcher.maxDoc();//hits.length;
int endIndex = Math.min(numTotalHits,startIndex + perPage);
使用
searcher.maxDoc()取出搜索的總記錄數(shù),使用search(query,null,startIndex+perPage,new Sort(new SortField(Fields.FIELD_CHECKTIME,SortField.AUTO,true))).scoreDocs取出當前一頁的索引記錄(這個是2.4的新用法,可以獲得更高的性能),new Sort(new SortField(Fields.FIELD_CHECKTIME,SortField.AUTO,true)))來處理索引結果的排序。
Document doc =searcher.doc(hits[i].doc);
String title1 = doc.get(Fields.FIELD_TITLE);
使用
searcher.doc(hits[i].doc)取出索引的具體記錄
3.高亮顯示
SimpleHTMLFormatter simpleHTMLFormatter = new SimpleHTMLFormatter("<b><font color='red'>", "</font></b>");
Highlighter highlighter = new Highlighter(simpleHTMLFormatter,
new QueryScorer(query));
highlighter.setTextFragmenter(new SimpleFragmenter(bestMatchSize));
if (title1 != null) {
TokenStream tokenStream = analyzer.tokenStream(Fields.FIELD_TITLE,
new StringReader(title1));
highLightTitle = highlighter.getBestFragment(tokenStream,title1);
}
new SimpleHTMLFormatter("<b><font color='red'>", "</font></b>")構造高亮顯示的樣式。
highlighter.setTextFragmenter(new SimpleFragmenter(bestMatchSize))設置顯示索引內(nèi)容的最大字符數(shù),相當于自動抽取含有關鍵的摘要。
當然這個只是簡單索引和檢索過程。
還有一些其他工作要做:
1.索引的過程就是查詢的過程,需要把沒有索引的文章查詢出來進行索引,完畢有要打上標記。這里面就要為文章擴展索引標記,建立一些文章查詢。
2.將索引操作加入調(diào)度定時執(zhí)行,這個用quartz就可以了。