Lucene和Solr原理初探
Lucene是一個全文搜索框架,而不是應用產品。因此它并不像http://www.baidu.com/ 或者google Desktop那樣拿來就能用,它只是提供了一種工具讓你能實現這些產品。實際上lucene的功能很單一,說到底,就是你給它若干個字符串,然后它為你提供一個全文搜索服務,告訴你你要搜索的關鍵詞出現在哪里。
傳統的關系型數據庫搜索速度慢,性能差,其原因在于在查詢數據時例如模糊查詢“%like%”需要進行鎖表操作,一行一行進行掃描,如果存在則返回結果。而Lucene利用了倒排索引、壓縮算法和二元搜索 ,它會提前把你需要的結果準備好,等你查詢時直接返回給你。那么它是如何知道你要搜索的是什么內容呢?它會對所有數據進行分析,找出可以搜索的關鍵詞,并把與之相關的結果記錄下來。
什么是倒排索引:根據屬性的值來查找記錄。這種索引表中的每一項都包括一個屬性值和具有該屬性值的各記錄的地址。由于不是由記錄來確定屬性值,而是由屬性值來確定記錄的位置,因而稱為倒排索引(invertedindex)
lucene的工作方式 。lucene提供的服務實際包含兩部分:一入一出。所謂入是寫入,即將你提供的源(本質是字符串)寫入索引或者將其從索引中刪除;所謂出是讀出,即向用戶提供全文搜索服務,讓用戶可以通過關鍵詞定位源
寫入流程 :源字符串首先經過analyzer處理,包括:分詞,分成一個個單詞;去除stopword(可選)。 將源中需要的信息加入Document的各個Field中,并把需要索引的Field索引起來,把需要存儲的Field存儲起來。 將索引寫入存儲器,存儲器可以是內存或磁盤。
讀出流程 :用戶提供搜索關鍵詞,經過analyzer處理。 對處理后的關鍵詞搜索索引找出對應的Document。用戶根據需要從找到的Document中提取需要的Field。
document:用戶提供的源是一條條記錄,它們可以是文本文件、字符串或者數據庫表的一條記錄等等。一條記錄經過索引之后,就是以一個Document的形式存儲在索引文件中的。用戶進行搜索,也是以Document列表的形式返回。
field :一個Document可以包含多個信息域,例如一篇文章可以包含“標題”、“正文”、“最后修改時間”等信息域,這些信息域就是通過Field在Document中存儲的。 Field有兩個屬性可選:存儲和索引。通過存儲屬性你可以控制是否對這個Field進行存儲;通過索引屬性你可以控制是否對該Field進行索引。這看起來似乎有些廢話,事實上對這兩個屬性的正確組合很重要。
Lucene和Solr的關系:它們就像是jdbc和hibernate的關系,Lucence是原生的搜索框架,Solr是封裝的Lucene。Lucene長于進行英文的分詞搜索,要進行中文分詞可以使用Sphinx配合XunSearch
總結
以上是生活随笔為你收集整理的Lucene和Solr原理初探的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在线解方程软件集合(收藏)
- 下一篇: 微软MDT 安装与配置(一)