天天看點

初始lucene與solr

    對于每個軟體,當資料量很大時,sql查詢的效率将會很低,今天我們來介紹兩個解決此問題的技術。

    Lucene 是一個基于 Java 的全文資訊檢索工具包,它不是一個完整的搜尋應用程式,而是為你的應用程式提供索引和搜尋功能。Lucene 目前是 Apache Jakarta 家族中的一個開源項目。也是目前最為流行的基于 Java 開源全文檢索工具包。

    目前已經有很多應用程式的搜尋功能是基于Lucene 的,比如 Eclipse 的幫助系統的搜尋功能。Lucene 能夠為文本類型的資料建立索引,是以你隻要能把你要索引的資料格式轉化的文本的,Lucene 就能對你的文檔進行索引和搜尋。

     下圖表示了搜尋應用程式和Lucene 之間的關系,也反映了利用 Lucene 建構搜尋應用程式的流程:

初始lucene與solr

    而solr就是一個基于lucene開發包開發的搜尋引擎。下載下傳solr包,安裝就可以運作,不用再開發。如果你有需要也可以在solr上再開發。solr安裝後根據需要配置一下,就可以索引自己的資料進去,并進行搜尋。除solr外還有elastic search 等基于lucene開發的其它開源搜尋引擎。

初始lucene與solr

索引和搜尋

    索引是現代搜尋引擎的核心,建立索引的過程就是把源資料處理成非常友善查詢的索引檔案的過程。為什麼索引這麼重要呢,試想你現在要在大量的文檔中搜尋含有某個關鍵詞的文檔,那麼如果不建立索引的話你就需要把這些文檔順序的讀入記憶體,然後檢查這個文章中是不是含有要查找的關鍵詞,這樣的話就會耗費非常多的時間,想想搜尋引擎可是在毫秒級的時間内查找出要搜尋的結果的。

    這就是由于建立了索引的原因,你可以把索引想象成這樣一種資料結構,他能夠使你快速的随機通路存儲在索引中的關鍵詞,進而找到該關鍵詞所關聯的文檔。Lucene 采用的是一種稱為反向索引(inverted index)的機制。反向索引就是說我們維護了一個詞 / 短語表,對于這個表中的每個詞 / 短語,都有一個連結清單描述了有哪些文檔包含了這個詞 / 短語。

    這樣在使用者輸入查詢條件的時候,就能非常快的得到搜尋結果。

    對文檔建立好索引後,就可以在這些索引上面進行搜尋了。搜尋引擎首先會對搜尋的關鍵詞進行解析,然後再在建立好的索引上面進行查找,最終傳回和使用者輸入的關鍵詞相關聯的文檔。

    我們下篇将會講解如何在tomcat中部署solr。