Lucene 3.3 學習筆記 1 介紹

Lucene 3.3 學習筆記 1 Lucene 3.3 學習筆記 1 包架構
------------------------

1. Lucene介紹

   Lucene的作者說過,Lucene只是一個高效的全文搜索引擎庫,而不是一個平臺,提供了非常簡單的API,使其可以滿足用戶對全文索引的需求。
   http://lucene.apache.org/java/docs/index.html
   這裏可以下載到最新的Lucene庫,其中的wiki是一個不錯的學習的地方
   http://wiki.apache.org/lucene-java/FrontPage?action=show&redirect=FrontPageEN

   目前有很多網站和軟件用到了Lucene,如社交網站LinkedIn和蘋果的ITunes軟件中都用到了Lucene來做實時與全文索引。


2. Lucene架構包介紹

   2.1 文檔的一個對象模型抽象庫 - Document

      這個庫提供了索引文檔對象的一個抽象,所有的文檔對於Lucene來說都是一個Document抽象。
  Document => [Field1,Field2,...,FieldN]
  Field    => [Term1,Term2,...,TermN]

   2.2 文本解析庫 - Analysis

       這個庫是對文本進行解析,得到相應的Term對象,在Index與Searcher的時候都會用到,在索引過程中,它會對被索引的文件進行解析,而在搜索過程中,它會對查詢條件進行解析。

   2.3 索引庫 - Index

      它主要是用來對文檔建立索引,對索引進行維護(更新索引,優化索引等),爲查詢提供訪問接口。

   2.4 存儲庫 - store

      它主要是用來存儲索引內容的,這裏提供了兩種存儲方式,一種是磁盤存儲,另一個是內存存儲。

   2.5 查詢庫 - search

      它主要是爲用戶提供查詢接口的,對用戶的查詢結果進行評估,並返回與用戶最相關的查詢信息。

    2.6 工具庫 - util

      主要是爲上面的庫提供一些I/O或者算法方法的工具類

  

3. 簡單的例子

   當你下載了Lucene的可執行包後,會在contrib中有一箇中demo的目錄,其中就是對Lucene的簡單使用,下面對其進行相應的分析。

   3.1 索引

    這裏的索引就是對文檔建立索引,以方便用戶查詢,我們看org.apache.lucene.demo.IndexFiles.java就是完成這樣的一個工作。下面我們來看一下它的主要的源代碼:
	  //~1 這裏生成一個索引目錄
      Directory dir = FSDirectory.open(new File(indexPath));
	  //~2 生成一個標準的分析器,如果你要用自己的分詞器,可以擴展Analyzer與Tokenizer類
      Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_31);
	  //~3 這裏對索引進行配置
      IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_31, analyzer);


	  // 是索引建立一個新的索引還是進行增量索引
      if (create) {
        // Create a new index in the directory, removing any
        // previously indexed documents:
        iwc.setOpenMode(OpenMode.CREATE);
      } else {
        // Add new documents to an existing index:
        iwc.setOpenMode(OpenMode.CREATE_OR_APPEND);
      }


		// 配置索引的內存,以提高索引效率
      // Optional: for better indexing performance, if you
      // are indexing many documents, increase the RAM
      // buffer.  But if you do this, increase the max heap
      // size to the JVM (eg add -Xmx512m or -Xmx1g):
      //
      // iwc.setRAMBufferSizeMB(256.0);


	  //~4 生成一個索引輸出類,用於寫了索引內容
      IndexWriter writer = new IndexWriter(dir, iwc);
	  //~5 索引文檔
	  // 這裏主要是讀出要索引目錄中的文件,生成相應的抽象文檔對象,
	  // 然後調用IndexWriter的addDocument或者是updateDocuemtn來建立或者更新索引。
      indexDocs(writer, docDir);


	  // 是否進行索引優化,
	  // NOTE: if you want to maximize search performance,
      // you can optionally call optimize here.  This can be
      // a costly operation, so generally it's only worth
      // it when your index is relatively static (ie you're
      // done adding documents to it):
      //
      // writer.optimize();
	  //~6 關閉索引寫出器
      writer.close();

   3.2 查詢

 這裏的查詢主要是對索引好的數據進行查詢操作,在org.apache.lucene.demo.SearchFiles.java中可以看到相應的查詢代碼,部分主要代碼如一下:
  //~1 生成一個索引查詢器,輸入爲索引目錄
	  IndexSearcher searcher = new IndexSearcher(FSDirectory.open(new File(index)));
	  //~2 生成一個查詢條件的分析器
      Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_31);
	  //~3 生成一個查詢的分析器,主要是對查詢條件進行分析,生成相應的Query
      QueryParser parser = new QueryParser(Version.LUCENE_31, field, analyzer);
      //~4 對查詢條件進行分析,產生相應的Query對象 
      Query query = parser.parse(line);
      System.out.println("Searching for: " + query.toString(field));
      //~5 調用索引查詢對象的search方法進行索引查詢,得到查詢結果     
      TopDocs results = searcher.search(query, null, 100);


4. 總結

   這裏對Lucene做了一個簡單的分析,再結合索引與查詢的API調用來簡單瞭解一下其使用方法。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章