<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    鷹翔宇空

    學習和生活

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      110 Posts :: 141 Stories :: 315 Comments :: 1 Trackbacks
    引自:http://www.gamvan.com/developer/java/opener/2005/12/846.html

    對于lucene全文檢索,可以簡約地看看它的7個主要類,這7個類同時也表達了處理全文檢索的7個意念。因為數據庫比較為人所熟悉,它又與全文檢索某些理念極為相似,所以在對下面的概念說明時,將會大量在滲入數據庫和全文檢索間的類比。
    1)Document :它的中文意思是文檔,對于一個文檔,通常都包括它的標題、時間、作者、內容。如果讓它的意思泛化,它也有文件的意思(相信Lucene的作者在取這個類名的時候也是經過再三斟酌的),對于文件,它可以指一個TXT文本、一個HTML網頁、一個PDF文件等等。總而言之,它是映射著某一個具體的文件,這就是它的單位粒度。對應于數據庫的概念是記錄,英文是Record,weblucene在索引源的xml中就原原本本地采用了這個概念,可參照<weblucene_home>/dump/blog.xml 。

    2)Field :中文意思是字段。漢語的翻譯將這個單詞的意思表達得更恰如其分了,意思是文字片段,它可以是一個或多個字。字段是文檔(Document)的次粒度單位,也是檢索的最基本單位。注意這個概念跟在搜索引擎的輸入框中隨意輸入的那幾個字或幾組字不是一樣的,在搜索輸入框中輸入的那些文字首先需要經過一個QueryParser(這也是7個類中的一個)將其分解成真正的Field。 在數據庫中本來就有Field 這個概念,它即是Record的次級單位。在數據庫一條或多條記錄怎么被找出來的,往往就經由對Field的檢索而得來。在全文檢索中Document的最終取得也是差不多,它是根據現在的某個Filed來決定的。即根據文檔中的某些還不完整的東西牽引出它的所需的全部。
    示例代碼:
    代碼內容
    [com.chedong.weblucene.search.WebLuceneResultSetTest]
    Document doc = new Document();
    doc.add(Field.Keyword("keyword", "房地產"));
    doc.add(Field.Keyword("keyword", "非典"));

    3)IndexWriter :索引書寫者
    示例代碼:
    [org.apache.lucene.index.TestIndexWriter]
    代碼內容
    Document doc = new Document();
    doc.add(Field.UnStored("content", "aaa"));
    try {
    IndexWriter writer = new IndexWriter(dir, new WhitespaceAnalyzer(), true);
    writer.addDocument(doc);
    }
    catch (IOException e) {
    e.printStackTrace();
    }

    它的構造器new IndexWriter(dir, new WhitespaceAnalyzer(), true) 有三個參數,分別是Directory對象、分析器對象(這是下一個要介紹的類)和一個布爾量,是否要重寫索引就是由這個布爾量標明的,如果取false則僅僅是將索引附加上來。

    4)Analyzer : 分析器,它將目錄中的一組原始文件分析成由一組Document和它相應的次級粒度Field組成的索引。因為不同的文件類型,同樣的文本其內部文件流組織形式是不一樣的,所以需要不同的分析器處理不同的文件類型(如PDFAnalyzer、HtmlAnalyzer)。又因為不同的文字語言處理Field拆分(Token)上是不一樣的,所以在語言角度上又有另一層分析器的類別區分,如下面這行代碼是處理普通中文字符的
    [com.chedong.weblucene.search.WebLuceneResultSetTest]
    IndexWriter writer = new IndexWriter(dir, new CJKAnalyzer(), true);

    5)QueryParser :這前面在區分Field和用戶輸入的搜索關鍵字時已經提及了。(它所用的詞是Query,跟數據庫所用的是一個概念的,這個詞同樣的檢索上讓人感覺沒有像Search那么費盡心思去深究。)QueryParser并沒有實際地去做查詢工作,它只是Parser(剖析)用戶輸入的東西,并把剖析的結果以一種規則的形式送給Searcher去執行一個真正的搜索。作為剖析的結果,不僅僅是Field,還有Field們相互間的關系(terms,譬如邏輯和AND,邏輯或OR, 邏輯非NOT)。

    6)Searcher : 搜索一個Query,將結果返回。
    [org.apache.lucene.search..TestNot]
    代碼內容
    RAMDirectory store = new RAMDirectory();
    IndexWriter writer = new IndexWriter(store, new SimpleAnalyzer(), true);

    Document d1 = new Document();
    d1.add(Field.Text("field", "a b"));

    writer.addDocument(d1);
    writer.optimize();
    writer.close();

    Searcher searcher = new IndexSearcher(store);
    Query query = QueryParser.parse("a NOT b", "field", new SimpleAnalyzer());
    //System.out.println(query);
    Hits hits = searcher.search(query);

    對于每一個搜索器對象,它都需要指定一個索引文件路徑,然后由搜索器對Query對象執行查詢。 上面的這個類袖珍地對7個主要類都均有涉及。

    7)Hits : Lucene的類注釋是:A ranked list of documents, used to hold search results. 搜索的結果不僅僅是一些文檔,而且這些文檔還是有級別的,這個級別是對于先后次序而言的。它對應于數據庫中的RecordSet / ResultSet 。
    posted on 2006-02-20 14:31 TrampEagle 閱讀(748) 評論(0)  編輯  收藏 所屬分類: opensource
    主站蜘蛛池模板: 免费观看成人毛片a片2008| 国产精品免费大片| 最近最好的中文字幕2019免费| 亚洲产国偷V产偷V自拍色戒| 99免费在线视频| 亚洲人成伊人成综合网久久久| 中文字幕免费在线播放| 亚洲熟妇丰满多毛XXXX| 国产午夜精品免费一区二区三区| 亚洲av永久无码精品秋霞电影影院| 四虎国产精品免费永久在线| 亚洲av永久无码精品古装片| 日韩在线永久免费播放| 亚洲国产精品网站久久| 毛片A级毛片免费播放| 精品久久久久久久久亚洲偷窥女厕| 国产高清在线免费视频| 无码免费又爽又高潮喷水的视频| 亚洲综合国产一区二区三区| 久久青草免费91线频观看站街| 亚洲欧洲日产国码www| 久九九精品免费视频| 亚洲av无码日韩av无码网站冲| 免费看男女下面日出水视频| 中文永久免费观看网站| 亚洲色图.com| 国产高清免费的视频| 大地影院MV在线观看视频免费| 亚洲小视频在线播放| 国产高清视频在线免费观看| 国产免费牲交视频免费播放| 伊人久久综在合线亚洲2019| 成年女人免费碰碰视频| j8又粗又长又硬又爽免费视频| 亚洲男人第一av网站| 破了亲妺妺的处免费视频国产| 中文字幕在线观看免费| ass亚洲**毛茸茸pics| 亚洲一区二区三区国产精品| 在免费jizzjizz在线播| 特级毛片A级毛片100免费播放|