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 閱讀(1637) 評論(0)  編輯  收藏 所屬分類: java
          主站蜘蛛池模板: 宣威市| 吉木乃县| 大方县| 乌拉特后旗| 肇源县| 孙吴县| 新泰市| 荣昌县| 女性| 临颍县| 类乌齐县| 武安市| 寿宁县| 桂平市| 惠来县| 宜章县| 祁阳县| 独山县| 平塘县| 淮滨县| 湖南省| 韶关市| 平度市| 文安县| 华坪县| 焦作市| 三门县| 花莲县| 罗源县| 山丹县| 南岸区| 商城县| 秦安县| 聊城市| 平利县| 彩票| 通河县| 益阳市| 富民县| 囊谦县| 长宁区|