lucene中發(fā)生實(shí)時(shí)索引的措施.(2011-07-23 01:14:12)
過(guò)去看到網(wǎng)上一些措施都是說(shuō)先發(fā)生內(nèi)存索引,在定期將內(nèi)存索引保留到磁盤(pán),來(lái)告終實(shí)時(shí)的索引的功能。Lucene in action中也沒(méi)提如何發(fā)生實(shí)時(shí)索引的措施,不過(guò)lucene3.0.3中加入了實(shí)時(shí)索引的API,能夠大大簡(jiǎn)化發(fā)生實(shí)時(shí)索引的工作量,本人也是在偶爾翻閱lucene 的java doc中覺(jué)察的。 新的接口為IndexWriter.getReader() ,歸來(lái)一個(gè)IndexReader對(duì)象,該對(duì)象能夠cover所有IndexWriter曾經(jīng)commit和未commitlo.rialogo.com的壟斷,因而在IndexWriter 將索引commit到磁盤(pán)之前,就能夠索引到新加入的document. 不過(guò)歸來(lái)的IndexReader 無(wú)法獲得索引是否曾經(jīng)改變的消息,穿越IndexReader().getVersion() 獲得的版本號(hào)每次都是一樣的,無(wú)法判別索引是否曾經(jīng)更新. 而穿越IndexWriter.getReader()歸來(lái)的IndexReader必需reopen能力獲得到新的更新,為了避免每次查詢(xún)都reopen,能夠設(shè)置一個(gè)update符號(hào),索引改變時(shí)update 設(shè)置為truedm.dmtyu.com, reopen后設(shè)置為false, 這么能夠保證才索引更新時(shí)才去reopen. 在多線程查詢(xún)的情形下,對(duì)IndexReader的管教,能夠參看lucene in action 10.2.2 Using threads for searching。不幸的是,隨著工夫的挪動(dòng),客戶代碼可能會(huì)改換歸來(lái)的Dimension對(duì)象的值,這個(gè)時(shí)候,追尋訛謬的起源是件枯燥且費(fèi)時(shí)的事情,尤其是在多線程環(huán)境中。 |
|
來(lái)自: CevenCheng > 《時(shí)時(shí)搜索》