2007-7-2
突然想學lucene了,不知為什麼,就是想學了,為了防止半途而廢,決定寫讀書筆記,大家監督。
(初學者寫的,切記不可當教程看,不准的。本不想發在blog,但實在沒時間整別的了,還是發了吧)
lucene
是什麼?
lucence 是一種全文檢索工具,它按照一定的規則去建立檔案索引,然後再按照一定的規則根據索引進行資料的查詢,目的是提高查詢速度(但為了建立索引也耗費了額外的儲存空間)
以下是讀書筆記,是根據ajax in action和征服ajax做的筆記。以備日後複習交流。
在寫筆記之前其實已經看過ajax in action 了,但由於當時看的是英文版本並且2.0已經發布,所以沒願意做筆記;現在發現2.0的資料太少,不容易學習,還是決定先根據1.43來學習。畢竟自己還沒達到那種沒有資料就可以學習的水平…………,夠用就好
今天看了征服ajax的前幾章(第八章和第九章),感覺這兩章主要是舉了幾個例子,由於以前接觸過,馬虎一看而過,因為真正的祥解是從第十章開始的。
這裡大體總結一下lucence的機制,
用lecence進行全文檢索,是通過兩個步驟來完成的:建立索引和根據索引查詢。僅此而已,簡單嗎? 聽起來簡單,做個測試例子也不難,但真正要用到專案中並產生作用就有些難度了,因為需要做很多的額外工作。以前用過trs,感覺他們實現的不錯,但畢竟是收費的產品,還是自己能實現的好啊。
索引的建立
開始了,現在開始建立索引,沒辦法,不建立索引你怎麼去根據索引去查詢? 所以得從它開始啃了。
1 索引的建立過程
建立索引一般是經過下面幾個步驟的:
a 提取資料:為啥子要提取資料?因為lucence沒你想的那麼聰明,什麼樣的格式都能讀取出來,都能認識。看了征服ajax的第九章的例子,被索引的檔案格式好像是txt的,就是說純文字檔案的東西可以讀取出來,別的嘛,就得另說了阿.按照它的說法,得需要給每一種文件格式都寫一中資料分析器(按照lucence的說法好像叫做parser,也不知道好寫不?)
寫到這,好風忍不住想說兩句,其實我們現在做的專案,其實大多數是從資料庫裡讀取的資料並查詢的,從檔案裡讀取的還是少數吧?就算是從檔案裡讀取資料的話,我們也可以用一些現有的工具去讀取資料,如
poi等。就是說,我們可以利用現有的工具去獲取各種格式的資料(從資料庫裡讀取資料也可以看作是一種格式,只不過是利用
jdbc
去讀取哦)
就是說,如果lucence的parser不好寫或者根本就沒這麼個東西(我現在認為他是乙個介面),我們可以去自己寫,凡只需要返回純文字資料就成了唄。寫個介面,建立paser類返回同樣的資料就可以阿(好風模式學的不好,不知道做起來能不能這麼簡單)。
b 建立document :
這個東西嘛,根據我現在的理解就相當於資料庫裡的一行,一條記錄。
查詢出的結果是以他為最小單位的好像。裡面有既然是一行,那麼就應該有列嘍(或者叫字段),想起來了,lucene中好像有個field的東西;建立乙個document的時候需要建立乙個或多個field,field可是有很多態別的,比如專門用來檢索的,有的專門用來儲存檢索資料。在建立索引的時候,你就可以建立乙個索引字段,再建立乙個內容字段;在查詢的時候,你就可以根據索引字段得到這乙個document,然後根據獲取內容字段,就可以得到你想要的值啦!可以有多個索引欄位和內容欄位的。
c 分析並建索
將document(包括field)建立完畢之後,我們就需要建立乙個indexwriter物件,看名字就知道是用來建立索引的,指定好索引檔案所在的位置以及建立索引用的分析器,就可以將document寫入索引了。就好比indexwriter建立了乙個資料庫的表(索引檔案),再向這個表裡插入行資料(document),這裡分析器可以有不同的型別,咂用俺還不會…………
LUCENE 讀書筆記 20070712
20070712 檢索 建立了索引就是為了檢索用的,下面就開始看嘍。檢索的步驟 1 建立indexsearcher 初始化indexsearcher的方法有很多種,最簡單的就是傳遞乙個索引檔案所在目錄的字串作為引數。2 構建query query代表了查詢的條件以及查詢的一些引數 3 返回查詢結果並...
LUCENE 讀書筆記 20070704
2007 7 4 建立索引 前面已經建立了document和field,那麼如何儲存建立好的索引呢?這是通過indexwriter實現的。indexwriter在建立的時候需要指定索引檔案所在目錄引數 分析器引數 用來在進行索引的時候對文字進行分析,用來進行將索引字段進行切詞的操作 是否重新建立索引...
Lucene讀書筆記(三)
lucene索引文件格式 以上就是lucene的索引檔案的概念結構。lucene索引index由若干段 segment 組成,每一段由若干的文件 document 組成,每乙個文件由若干的域 field 組成,每乙個域由若干的項 term 組成。項是最小的索引概念單位,它直接代表了乙個字串以及其在檔...