Lucene入門.

1. 1 倒排索引java

將數據加入到索引庫(你能夠理解成另一個數據庫)時,會先提取數據中的詞彙(分詞),將詞彙加入到文檔域,文檔域中記錄了詞彙以及詞彙在哪條數據記錄中出現過的數據下標。用戶在搜索數據時,先將用戶搜索的數據進行詞彙提取,而後把對應詞彙拿到索引域中進行匹配查找,查找後會找到對應的下標ID,再根據對應下標ID到文檔域中找真實數據.數據庫

1.2  應用場景 :apache

 一、 單機軟件的搜索(word中的搜索)api

 二、 站內搜索 (baidu貼吧、論壇、 京東、 taobao)架構

 三、 垂直領域的搜索 (818工做網)eclipse

 四、 專業搜索引擎公司 (google、baidu)工具

2.1  什麼是Lucene優化

Lucene是apache軟件基金會 Jakarta項目組的一個子項目,是一個開放源代碼的全文檢索引擎工具包,但它不是一個完整的全文檢索引擎,而是一個全文檢索引擎的架構,提供了完整的查詢引擎和索引引擎,部分文本分析引擎。搜索引擎

  • Lucene是一套用於全文檢索和搜尋的開源程式庫,由Apache軟件基金會支持和提供。 Lucene提供了一個簡單卻強大的應用程式接口,可以作全文索引和搜尋, 在Java開發環境裏Lucene是一個成熟的免費開放源代碼工具。
  • Lucene並非現成的搜索引擎產品,但能夠用來製做搜索引擎產品。

2.2  Lucene與搜索引擎的區別google

全文檢索系統是按照全文檢索理論創建起來的用於提供全文檢索服務的軟件系統,包括創建索引、處理查詢返回結果集、增長索引、優化索引結構等功能。例如:百度搜索、eclipse幫助搜索、淘寶網商品搜索等。

搜索引擎是全文檢索技術最主要的一個應用,例如百度。搜索引擎起源於傳統的信息全文檢索理論,即計算機程序經過掃描每一篇文章中的每個詞,創建以詞爲單位的倒排文件,檢索程序根據檢索詞在每一篇文章中出現的頻率和每個檢索詞在一篇文章中出現的機率,對包含這些檢索詞的文章進行排序,最後輸出排序的結果。全文檢索技術是搜索引擎的核心支撐技術。

Lucene和搜索引擎不一樣,Lucene是一套用java或其它語言寫的全文檢索的工具包,爲應用程序提供了不少個api接口去調用,能夠簡單理解爲是一套實現全文檢索的類庫,搜索引擎是一個全文檢索系統,它是一個單獨運行的軟件系統。

3.1  Lucene入門

實現這麼一個案例,經過Java代碼調用Lucene API實現對索引庫的增刪改查,索引庫數據來源於數據庫,因此增長操做須要先從數據庫將數據查詢出來,再調用Lucene API將數據加入到索引庫中。

3.2  Lucene實現全文檢索思路

全文檢索的流程分爲兩大部分:索引流程、搜索流程。

  • 索引流程:即採集數據à構建文檔對象à分析文檔(分詞)à建立索引。
  • 搜索流程:即用戶經過搜索界面輸入à建立查詢à執行搜索,搜索器從索引庫搜à渲染搜索結果。

4.1 經常使用api介紹及分詞

IndexSearcher搜索方法以下:

4.2

  • 分詞:採集到的數據會存儲到document對象的Field域中,分詞就是將Document中Field的value值切分紅一個一個的詞。
  • 過濾:包括去除標點符號過濾、去除停用詞過濾(的、是、a、an、the等)、大寫轉小寫、詞的形還原(複數形式轉成單數形參、過去式轉成如今式。。。)等。

5.1  Field屬性

Field是文檔中的域,包括Field名和Field值兩部分,一個文檔能夠包括多個Field,Document只是Field的一個承載體,Field值即爲要索引的內容,也是要搜索的內容。

Field中三個很是重要的屬性:

是否分詞(tokenized)

         ,將field的內容分紅一個一個單詞。分詞的目的:分詞目的爲了索引

                  例如:商品的名稱。

         ,不分詞,將內容做爲一個總體存儲。

          例如:商品ID 身份證號,圖片路徑

是否索引(indexed)

         ,將field的值創建索引,索引的目的:索引的目的爲了搜索。

                  例如:商品的名稱

         否,不創建索引

          例如:圖片路徑、文件路徑等

是否存儲(stored),存不存取決於查詢結果展現不展現 

          是,存儲field的值。存儲的目的:(爲了展現在頁面)

                   例如:商品名稱,圖片路徑

          否,不存儲field的值

          例如:商品介紹。若是須要展現,根據ID從數據庫查詢展現在詳情頁面。

5.2  Field經常使用類型

下邊列出了開發中經常使用 的Filed類型,注意Field的屬性,根據需求選擇:

Field類

數據類型

Analyzed

是否分詞

Indexed

是否索引

Stored

是否存儲

說明

StringField(FieldName, FieldValue,Store.YES))

字符串

N

Y

Y或N

這個Field用來構建一個字符串Field,可是不會進行分詞,會將整個串存儲在索引中,好比(訂單號,身份證號等)

是否存儲在文檔中用Store.YES或Store.NO決定

LongField(FieldName, FieldValue,Store.YES)

FloatField(FieldName, FieldValue,Store.YES)

Long類型Float類型

等等數字類型

Y

Y

Y或N

這個Field用來構建一個Long數字型Field,進行分詞和索引,好比(價格)

是否存儲在文檔中用Store.YES或Store.NO決定

StoredField(FieldName, FieldValue)

重載方法,支持多種類型

N

N

Y

這個Field用來構建不一樣類型Field(圖片路徑)

不分詞,不索引,但要Field存儲在文檔中

TextField(FieldName, FieldValue, Store.NO)

TextField(FieldName, reader)

字符串

Y

Y

Y或N

若是是一個Reader, lucene猜想內容比較多,會採用Unstored的策略.

蜘蛛磁力搜索
相關文章
相關標籤/搜索