laoding
          本來(lái)我以為,隱身了別人就找不到我,沒(méi)有用的,像我這樣拉風(fēng)的男人,無(wú)論走到哪里,都像在黑暗中的螢火蟲(chóng)一樣,那樣的鮮明,那樣的出眾。我那憂郁的眼神,稀疏的胡茬,那微微隆起的將軍肚和親切的笑容......都深深吸引了眾人......
          posts - 0,  comments - 37,  trackbacks - 0
          因?yàn)閘ucene索引的時(shí)候是將String型的信息建立索引的,所以這里必須是將word/pdf/html等文件的內(nèi)容轉(zhuǎn)化問(wèn)字符型。
          lucene的jar包自己去下載。
          首先是建立索引的代碼:

          public class TextFileIndexer {   
              
          public static void main(String[] args) throws Exception {   
                  
          /* 指明要索引文件夾的位置,這里是d盤(pán)的s文件夾下 */  
                  File fileDir 
          = new File("d:\\s");   
            
                  
          /* 這里放索引文件的位置 */  
                  File indexDir 
          = new File("d:\\index");   
                  Analyzer luceneAnalyzer 
          = new StandardAnalyzer();   
                  IndexWriter indexWriter 
          = new IndexWriter(indexDir, luceneAnalyzer,   
                          
          true);   
                  File[] textFiles 
          = fileDir.listFiles();   
                  
          long startTime = new Date().getTime();   
                     
                  
          //增加document到索引去     
                          System.out.println("File正在被索引.");  
                          
                          
          /*
                           * 注意要變的就是這里,路徑和讀取文件的方法
                           * 
          */
                          String path 
          ="d:\\s\\2.doc";
                          String temp 
          = ReadFile.readWord(path);
          //                String path ="d:\\s\\index.htm"; 
          //                String temp = ReadFile.readHtml(path);
                          Document document = new Document();   
                          Field FieldPath 
          = new Field("path",path, 
                                  Field.Store.YES, Field.Index.NO);   
                          Field FieldBody 
          = new Field("body", temp, Field.Store.YES,   
                                  Field.Index.TOKENIZED,   
                                  Field.TermVector.WITH_POSITIONS_OFFSETS);   
                          document.add(FieldPath);   
                          document.add(FieldBody);   
                          indexWriter.addDocument(document);   
                       
                    
                  
          //optimize()方法是對(duì)索引進(jìn)行優(yōu)化   
                  indexWriter.optimize();   
                  indexWriter.close();   
                     
                  
          //測(cè)試一下索引的時(shí)間   
                  long endTime = new Date().getTime();   
                  System.out   
                          .println(
          "這花費(fèi)了"  
                                  
          + (endTime - startTime)   
                                  
          + " 毫秒來(lái)把文檔增加到索引里面去!"  
                                  
          + fileDir.getPath());   
              }  
           }

          上面已經(jīng)注釋了要換的地方,我們要做的就是換文件的路徑和讀取文件的方法。

          下面來(lái)具體看下讀取文件的方法

          1.首先來(lái)看WORD文檔:
          我這里用的是poi,相關(guān)jar包自己去下載,然后加到工程中(以下所要用的jar包也是,不再重復(fù)說(shuō))。

          來(lái)看相關(guān)代碼:
              public static String readWord(String path) {
                  StringBuffer content 
          = new StringBuffer("");// 文檔內(nèi)容
                  try {

                      HWPFDocument doc 
          = new HWPFDocument(new FileInputStream(path));
                      Range range 
          = doc.getRange();
                      
          int paragraphCount = range.numParagraphs();// 段落
                      for (int i = 0; i < paragraphCount; i++) {// 遍歷段落讀取數(shù)據(jù)
                          Paragraph pp = range.getParagraph(i);
                          content.append(pp.text());
                      }

                  } 
          catch (Exception e) {

                  }
                  
          return content.toString().trim();
              }

          2.PDF文件用的是PDFbox:

          public static String readPdf(String path) throws Exception {
                  StringBuffer content 
          = new StringBuffer("");// 文檔內(nèi)容
                  FileInputStream fis = new FileInputStream(path);
                  PDFParser p 
          = new PDFParser(fis);
                  p.parse();
                  PDFTextStripper ts 
          = new PDFTextStripper();
                  content.append(ts.getText(p.getPDDocument()));
                  fis.close();
                  
          return content.toString().trim();
              }

          3.html文件:

          public static String readHtml(String urlString) {

                  StringBuffer content 
          = new StringBuffer("");
                  File file 
          = new File(urlString);
                  FileInputStream fis 
          = null;
                  
          try {
                      fis 
          = new FileInputStream(file);
                      
          // 讀取頁(yè)面
                      BufferedReader reader = new BufferedReader(new InputStreamReader(
                              fis,
          "utf-8"));//這里的字符編碼要注意,要對(duì)上html頭文件的一致,否則會(huì)出亂碼
                      
                      String line 
          = null;

                      
          while ((line = reader.readLine()) != null) {
                          content.append(line 
          + "\n");
                      }
                      reader.close();
                  } 
          catch (Exception e) {
                      e.printStackTrace();
                  }
                  String contentString 
          = content.toString();
                  
          return contentString;
              }

          4.txt文件:

          public static String readTxt(String path) {
                  StringBuffer content 
          = new StringBuffer("");// 文檔內(nèi)容
                  try {
                      FileReader reader 
          = new FileReader(path);
                      BufferedReader br 
          = new BufferedReader(reader);
                      String s1 
          = null;

                      
          while ((s1 = br.readLine()) != null) {
                          content.append(s1 
          + "\r");
                      }
                      br.close();
                      reader.close();
                  } 
          catch (IOException e) {
                      e.printStackTrace();
                  }
                  
          return content.toString().trim();
              }

          接下來(lái)數(shù)搜索代碼:

          public class TestQuery {   
              
          public static void main(String[] args) throws IOException, ParseException {   
                  Hits hits 
          = null;   
                  
          //搜索內(nèi)容自己換
                  String queryString = "根據(jù)國(guó)務(wù)院的決定";   
                  Query query 
          = null;  
                  
                  IndexSearcher searcher 
          = new IndexSearcher("d:\\index"); //這里注意索引存放的路徑 
            
                  Analyzer analyzer 
          = new StandardAnalyzer();   
                  
          try {   
                      QueryParser qp 
          = new QueryParser("body", analyzer);   
                      
          /**
                       * 建索引的時(shí)候我們指定了body建立為內(nèi)容,我們搜索的時(shí)候也是針對(duì)body的,所以
                       *   QueryParser qp = new QueryParser("body", analyzer); 
                       *   這句和建立索引時(shí)候
                          Field FieldBody = new Field("body", temp, Field.Store.YES,   
                                  Field.Index.TOKENIZED,   
                                  Field.TermVector.WITH_POSITIONS_OFFSETS); 
                       *的這句的"body"是對(duì)應(yīng)的。
                       
          */
                      query 
          = qp.parse(queryString);   
                  } 
          catch (ParseException e) {
                      System.out.println(
          "異常"); 
                  }   
                  
          if (searcher != null) {   
                      hits 
          = searcher.search(query);   
                      
          if (hits.length() > 0) {   
                          System.out.println(
          "找到:" + hits.length() + " 個(gè)結(jié)果!");  
                          
          for (int i = 0; i < hits.length(); i++) {//輸出搜索信息 
                               Document document = hits.doc(i);
                               System.out.println(
          "contents:"+document.get("body"));
                               
          //同樣原理這里的document.get("body")就是取得建立在索引文件里面的額body的所有內(nèi)容
                               
          //你若想輸出文件路徑就用document.get("path")就可以了
                          }
                      } 
          else{
                          System.out.println(
          "0個(gè)結(jié)果!"); 
                      }   
                  }  
              } 
          posted on 2008-10-31 19:05 老丁 閱讀(10543) 評(píng)論(4)  編輯  收藏 所屬分類(lèi): 搜索引擎 lucene

          FeedBack:
          # re: lucene索引word/pdf/html/txt文件及檢索(搜索引擎)[未登錄](méi)
          2012-03-21 09:51 | ZXD
          想問(wèn),怎么這篇文章 里面的代碼 不行啊 一直報(bào)錯(cuò)、包都引了啊。。。。  回復(fù)  更多評(píng)論
            
          # re: lucene索引word/pdf/html/txt文件及檢索(搜索引擎)
          2012-07-23 15:58 |
          為什么自能搜索中文字符串,英文的都不能搜索到  回復(fù)  更多評(píng)論
            
          # re: lucene索引word/pdf/html/txt文件及檢索(搜索引擎)
          2014-12-10 14:12 | 古城奔馬
          老兄,你用的是哪個(gè)版本的jar包?  回復(fù)  更多評(píng)論
            
          # re: lucene索引word/pdf/html/txt文件及檢索(搜索引擎)
          2016-01-07 10:50 | 大頭頭
          String temp = ReadFile.readWord(path);我想請(qǐng)問(wèn)一下,這里面的ReadFile是哪個(gè)類(lèi)里的對(duì)象啊?需要導(dǎo)入什么樣的jar包嗎?  回復(fù)  更多評(píng)論
            
          本博客主為學(xué)習(xí)和復(fù)習(xí)之用,無(wú)關(guān)其他,想罵人的繞道
          Email:dkm123456@126.com
          大家一起交流進(jìn)步
          QQ:283582761


          <2016年1月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          留言簿(4)

          我參與的團(tuán)隊(duì)

          文章分類(lèi)(50)

          文章檔案(48)

          相冊(cè)

          朋友

          搜索

          •  

          積分與排名

          • 積分 - 96533
          • 排名 - 600

          最新評(píng)論

          主站蜘蛛池模板: 廊坊市| 博客| 吉木乃县| 苗栗县| 神农架林区| 宜春市| 合江县| 丹棱县| 元朗区| 绵竹市| 涟源市| 漯河市| 中阳县| 长顺县| 富顺县| 奈曼旗| 新郑市| 朔州市| 新邵县| 正镶白旗| 门头沟区| 张家界市| 西乌珠穆沁旗| 汉源县| 如东县| 南丹县| 富蕴县| 东辽县| 武夷山市| 泸水县| 剑川县| 体育| 大港区| 门源| 贵阳市| 古蔺县| 胶州市| 偏关县| 大厂| 宜都市| 浙江省|