Lucene學(xué)習(xí)-1

Lucene簡介

1.什么是Lucene

Lucene是一個全文搜索框架,而不是應(yīng)用產(chǎn)品。因此它并不像http://www.baidu.com/ 或者google Desktop那么拿來就能用,它只是提供了一種工具讓你能實(shí)現(xiàn)這些產(chǎn)品。

2.Lucene能做什么?

要回答這個問題,先要了解lucene的本質(zhì)。實(shí)際上lucene的功能很單一,說到底,就是你給它若干個字符串,然后它為你提供一個全文搜索服務(wù),告訴你你要搜索的關(guān)鍵詞出現(xiàn)在哪里。知道了這個本質(zhì),你就可以發(fā)揮想象做任何符合這個條件的事情了。你可以把站內(nèi)新聞都索引了,做個資料庫;你可以把一個數(shù)據(jù)庫表的若干個字段索引起來,那就不用再擔(dān)心因?yàn)椤?like%”而鎖表了;你也可以寫個自己的搜索引擎……

3.Lucene的性能表現(xiàn)

  • 測試一:250萬記錄,300M左右文本,生成索引380M左右,800線程下平均處理時間300ms。
  • 測試二:37000記錄,索引數(shù)據(jù)庫中的兩個varchar字段,索引文件2.6M,800線程下平均處理時間1.5ms

4.Lucene性能表現(xiàn)好的原因

  • 倒排索引
  • 壓縮算法
  • 二元搜索

5.倒排索引

  • 根據(jù)屬性的值來查找記錄。這種索引表中的每一項(xiàng)都包括一個屬性值和具有該屬性值的各記錄的地址。由于不是由記錄來確定屬性值,而是由屬性值來確定記錄的位置,因而稱為倒排索引(invertedindex)
  • 單詞-文件矩陣
單詞矩陣

6.Lucene工作方式

lucene提供的服務(wù)實(shí)際包含兩部分:一入一出。所謂入是寫入,即將你提供的源(本質(zhì)是字符串)寫入索引或者將其從索引中刪除;所謂出是讀出,即向用戶提供全文搜索服務(wù),讓用戶可以通過關(guān)鍵詞定位源

  • 寫入流程

源字符串首先經(jīng)過analyzer處理,包括:分詞,分成一個個單詞;去除stopword(可選---就是你想屏蔽的詞)。
將源中需要的信息加入Document的各個Field中,并把需要索引的Field索引起來,把需要存儲的Field存儲起來。
將索引寫入存儲器,存儲器可以是內(nèi)存或磁盤。

  • 讀出流程

用戶提供搜索關(guān)鍵詞,經(jīng)過analyzer處理。
對處理后的關(guān)鍵詞搜索索引找出對應(yīng)的Document。
用戶根據(jù)需要從找到的Document中提取需要的Field。

  • document

用戶提供的源是一條條記錄,它們可以是文本文件、字符串或者數(shù)據(jù)庫表的一條記錄等等。一條記錄經(jīng)過索引之后,就是以一個Document的形式存儲在索引文件中的。用戶進(jìn)行搜索,也是以Document列表的形式返回。

  • field

一個Document可以包含多個信息域,例如一篇文章可以包含“標(biāo)題”、“正文”、“最后修改時間”等信息域,這些信息域就是通過Field在Document中存儲的。
Field有兩個屬性可選:存儲和索引。通過存儲屬性你可以控制是否對這個Field進(jìn)行存儲;通過索引屬性你可以控制是否對該Field進(jìn)行索引。這看起來似乎有些廢話,事實(shí)上對這兩個屬性的正確組合很重要

  • 使用Lucene建立倒排索引文件
    • 導(dǎo)入lucene 相關(guān)jar包
    • 調(diào)用相關(guān)java API生成索引
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容