george

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            12 Posts :: 0 Stories :: 17 Comments :: 0 Trackbacks

          關于這個內容javaeye已經有不錯的例子了
          http://jnotnull.javaeye.com/blog/275327

          在這個例子的基礎上我想說一一些需要注意的地方。
          1.重建索引和增量索引
          IndexWriter writer = new IndexWriter(directory,analyzer,rebuild,new IndexWriter.MaxFieldLength(200000));

          只需要在構造IndexWriter的時候設置rebuild值就可以了
          當rebuild設為true的時候:就會刪除原來的索引,重建索引文件
          當rebuild設為false時:表示增量索引,是在原來索引文件的基礎上增加新的索引內容,當然第一次沒有索引文件的時候必須先重建索引生成索引文件。

          在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()取出搜索的總記錄數,使用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))設置顯示索引內容的最大字符數,相當于自動抽取含有關鍵的摘要。


          當然這個只是簡單索引和檢索過程。
          還有一些其他工作要做:
          1.索引的過程就是查詢的過程,需要把沒有索引的文章查詢出來進行索引,完畢有要打上標記。這里面就要為文章擴展索引標記,建立一些文章查詢。
          2.將索引操作加入調度定時執行,這個用quartz就可以了。



          posted on 2009-03-18 21:48 georgeliu 閱讀(1628) 評論(0)  編輯  收藏 所屬分類: java
          主站蜘蛛池模板: 龙里县| 昆山市| 宁蒗| 许昌县| 祁连县| 闸北区| 綦江县| 翼城县| 迁安市| 遂川县| 合阳县| 朝阳区| 乌拉特后旗| 贺州市| 连山| 英超| 博野县| 江华| 运城市| 牙克石市| 平顺县| 阿拉尔市| 温宿县| 满城县| 开江县| 巩义市| 宿松县| 绥江县| 竹溪县| 介休市| 安宁市| 衡山县| 博乐市| 成武县| 航空| 孝义市| 福州市| 炎陵县| 景谷| 黄大仙区| 长治县|