DANCE WITH JAVA

          開發(fā)出高質(zhì)量的系統(tǒng)

          導(dǎo)航

          <2007年6月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          1234567

          隨筆分類(277)

          隨筆檔案(238)

          閱讀排行榜

          常用鏈接

          統(tǒng)計

          積分與排名

          好友之家

          最新評論

          apache lucene 的核心類

          下邊介紹一下lucene的核心類:(參考lucene in action)
          主要有兩部分組成,核心索引類和核心搜索類,顧名思意,就是用來建立索引和用來搜索的類。

          IndexWriter:可以對索引進(jìn)行寫操作,但不能讀取或者搜索。是唯一能寫索引的類。

          Directory:Directory類代表一個Lucene索引的位置。它是一個抽象類,允許它的子類(其中的兩個包含在Lucene中)在合適時存儲索引。在我們的Indexer示例中,我們使用一個實際文件系統(tǒng)目錄的路徑傳遞給IndexWriter的構(gòu)造函數(shù)來獲得Directory的一個實例。IndexWriter然后使用Directory的一個具體實現(xiàn)FSDirectory,并在文件系統(tǒng)的一個目錄中創(chuàng)建索引。在你的應(yīng)用程序中,你可能較喜歡將Lucene索引存儲在磁盤上。這時可以使用FSDirectory,一個包含文件系統(tǒng)真實文件列表的Driectory子類,如同我們在Indexer中一樣。另一個Directory的具體子類是RAMDirectory。盡管它提供了與FSDirectory相同的接口,RAMDirectory將它的所有數(shù)據(jù)加載到內(nèi)存中。所以這個實現(xiàn)對較小索引很有用處,可以全部加載到內(nèi)存中并在程序關(guān)閉時銷毀。因為所有數(shù)據(jù)加載到快速存取的內(nèi)存中而不是在慢速的硬盤上,RAMDirectory適合于你需要快速訪問索引的情況,不管是索引或搜索。做為實例,Lucene的開發(fā)者在所有他們的單元測試中做了擴展使用:當(dāng)測試運行時,快速的內(nèi)存駐留索引被創(chuàng)建搜索,當(dāng)測試結(jié)束時,索引自動銷毀,不會在磁盤上留下任何殘余。當(dāng)然,在將文件緩存到內(nèi)存的操作系統(tǒng)中使用時RAMDirectory和FSDirectory之間的性能差別較小

          Analyzer:分析文本內(nèi)容,提取關(guān)鍵字

          Document:一個Document代表字段的集合。你可以把它想象為以后可獲取的虛擬文檔—一塊數(shù)據(jù),如一個網(wǎng)頁、一個郵件消息或一個文本文件。一個文檔的字段代表這個文檔或與這個文檔相關(guān)的元數(shù)據(jù)

          Field:在索引中的每個Document含有一個或多個字段,具體化為Field類。每個字段相應(yīng)于數(shù)據(jù)的一個片段,將在搜索時查詢或從索引中重新獲取。
          Lucene提供四個不同的字段類型,你可以從中做出選擇:

          Keyword—不被分析,但是被索引并逐字存儲到索引中。這個類型適合于原始值需要保持原樣的字段,如URL、文件系統(tǒng)路徑、日期、個人名稱、社會安全號碼、電話號碼等等。例如,我們在Indexer(列表1.1)中把文件系統(tǒng)路徑作為Keyword字段。

          UnIndexed—不被分析也不被索引,但是它的值存儲到索引中。這個類型適合于你需要和搜索結(jié)果一起顯示的字段(如URL或數(shù)據(jù)庫主鍵),但是你從不直接搜索它的值。因為這種類型字段的原始值存儲在索引中,這種類型不適合于存放比較巨大的值,如果索引大小是個問題的話。

          UnStored—和UnIndexed相反。這個字段類型被分析并索引但是不存儲在索引中。它適合于索引大量的文本而不需要以原始形式重新獲得它。例如網(wǎng)頁的主體或任休其它類型的文本文檔。

          Text—被分析并索引。這就意味著這種類型的字段可以被搜索,但是要小心字段大小。如果要索引的數(shù)據(jù)是一個String,它也被存儲;但如果數(shù)據(jù)(如我們的Indexer例子)是來自一個Reader,它就不會被存儲。這通常是混亂的來源,所以在使用Field.Text時要注意這個區(qū)別。
          所有字段由名稱和值組成。你要使用哪種字段類型取決于你要如何使用這個字段和它的值。嚴(yán)格來說,Lucene只有一個字段類型:以各自特征來區(qū)分的字段。有些是被分析的,有些不是;有些是被索引,然面有些被逐字地存儲等等。
          注意 注意Field.Text(String, String)和Field.Text(String, Reader)之間的區(qū)別。String變量存儲字段數(shù)據(jù),而Reader變量不存儲。為索引一個String而又不想存儲它,可以用Field.UnStored(String, String)

          下邊是核心搜索類:
          IndexSearcher:IndexSearcher用來搜索而IndexWriter用來索引:暴露幾個搜索方法的索引的主要鏈接。你可以把IndexSearcher想象為以只讀方式打開索引的一個類。它提供幾個搜索方法,其中一些在抽象基類Searcher中實現(xiàn);最簡單的接受單個Query對象做為參數(shù)并返回一個Hits對象。這個方法的典型應(yīng)用類似這樣:
          IndexSearcher is = new IndexSearcher(
          FSDirectory.getDirectory(“
          /tmp/index”, false));
          Query q 
          = new TermQuery(new Term(“contents”, “lucene”));
          Hits hits 
          = is.search(q);

          Term:
          Term是搜索的基本單元。與Field對象類似,它由一對字符串元素組成:字段的名稱和字段的值。注意Term對象也和索引過程有關(guān)。但是它們是由Lucene內(nèi)部生成,所以在索引時你
          一般不必考慮它們。在搜索時,你可能創(chuàng)建Term對象并TermQuery同時使用。
          Query q = new TermQuery(new Term(“contents”, “lucene”));
          Hits hits = is.search(q);
          這段代碼使Lucene找出在contents字段中含有單詞lucene的所有文檔。因為TermQuery對象繼承自它的抽象父類Query,你可以在等式的左邊用Query類型。

          Query
          Lucene中包含一些Query的具體子類。到目前為止,在本章中我們僅提到過最基本的Lucene Query:TermQuery。其它Query類型有BooleanQuery,PhraseQuery, PrefixQuery, PhrasePrefixQuery, RangeQuery, FilteredQuery和SpanQuery

          TermQuery
          TermQuery是Lucene支持的最基本的查詢類型,并且它也是最原始的查詢類型之一。它用來匹配含有指定值的字段的文檔.

          Hits類是一個搜索結(jié)果(匹配給定查詢的文檔)文檔隊列指針的簡單容器。基于性能考慮,Hits的實例并不從索引中加載所有匹配查詢的所有文檔,而是每次一小部分

          posted on 2007-06-12 09:52 dreamstone 閱讀(2741) 評論(0)  編輯  收藏 所屬分類: 搜索引擎lucence

          主站蜘蛛池模板: 西盟| 鄂托克前旗| 赣榆县| 满洲里市| 台北县| 来凤县| 修文县| 建昌县| 上饶县| 富锦市| 屯昌县| 益阳市| 水富县| 德昌县| 高台县| 定兴县| 栾川县| 枣庄市| 富阳市| 塘沽区| 湟源县| 海丰县| 云和县| 桓仁| 竹山县| 分宜县| 五河县| 台江县| 塔河县| 文化| 淮北市| 秦安县| 射阳县| 梓潼县| 神木县| 大同市| 镶黄旗| 密山市| 新密市| 钦州市| 遵义县|