george

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            12 Posts :: 0 Stories :: 17 Comments :: 0 Trackbacks

          關(guān)于這個內(nèi)容javaeye已經(jīng)有不錯的例子了
          http://jnotnull.javaeye.com/blog/275327

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

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

          在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));
          當(dāng)然這里的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取出當(dāng)前一頁的索引記錄(這個是2.4的新用法,可以獲得更高的性能),new Sort(new SortField(Fields.FIELD_CHECKTIME,SortField.AUTO,true)))來處理索引結(jié)果的排序。
          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>")構(gòu)造高亮顯示的樣式。
          highlighter.setTextFragmenter(new SimpleFragmenter(bestMatchSize))設(shè)置顯示索引內(nèi)容的最大字符數(shù),相當(dāng)于自動抽取含有關(guān)鍵的摘要。


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



          posted on 2009-03-18 21:48 georgeliu 閱讀(1637) 評論(0)  編輯  收藏 所屬分類: java
          主站蜘蛛池模板: 柳州市| 漯河市| 鹤峰县| 枝江市| 正阳县| 鹤庆县| 全椒县| 陇西县| 东阳市| 虎林市| 正阳县| 长垣县| 浪卡子县| 格尔木市| 本溪| 金湖县| 永新县| 铁岭市| 报价| 太谷县| 喀喇| 新泰市| 尼勒克县| 奎屯市| 德钦县| 建平县| 丘北县| 赤峰市| 长寿区| 鄂托克前旗| 琼海市| 定日县| 邹城市| 祁门县| 布拖县| 镇原县| 五峰| 静海县| 虞城县| 华容县| 石棉县|