Hibernate Search全面概述
Hibernate Search項(xiàng)目的Beta第二版發(fā)布的時(shí)候。InfoQ為此采訪了Hibernate Search項(xiàng)目的發(fā)起人Emmanuel Bernard以了解更多細(xì)節(jié),Emmanuel同時(shí)也是相關(guān)項(xiàng)目Hibernate Annotations和Hibernate EntityManager的發(fā)起人。根據(jù)Emmanuel所言,Hibernate Search目的是幫助Hibernate的使用者或是Java Persistence API(JPA)的使用者可以通過全文搜索索引來訪問Hibernate或JPA管理的對象。
Hibernate Search項(xiàng)目的主要特性包含以下幾個(gè)方面:
◆Lucene集成——作為強(qiáng)大高效的檢索引擎,Lucene的美名早已久經(jīng)考驗(yàn)了;
◆數(shù)據(jù)的自動插入和更新——當(dāng)一個(gè)對象通過Hibernate添加或更新時(shí),索引也會相應(yīng)進(jìn)行透明的更新;
◆支持眾多復(fù)雜的搜索方式——可快速的使用通配符進(jìn)行搜索,以及多關(guān)鍵詞全文檢索(multi-word text searches)和近似或同義詞搜索(approximation/synonym searches),或根據(jù)相關(guān)性排列搜索結(jié)果;
◆搜索集群(Search Clustering)——Hibernate Search提供了內(nèi)建搜索集群解決方案,其中包括一個(gè)基于JMS的異步查詢和索引系統(tǒng);
◆對Lucene API接口的直接調(diào)用——如果用戶打算處理某些特別復(fù)雜的問題,可以在查詢中直接使用Lucene提供的API接口;
◆對Lucene的自動管理——Hibernate Search可以管理并優(yōu)化Lucene的索引,并且非常高效地使用Lucene的API接口。
項(xiàng)目的主要目標(biāo)包含以下幾個(gè)方面:
◆易用性——和Hibernate的ORM映射一樣,Hibernate Search幫助用戶實(shí)現(xiàn)了業(yè)務(wù)90%的工作,并且使用戶專注于余下更為困難的業(yè)務(wù)實(shí)現(xiàn)部分;
◆和已有的Hibernate/JPA編程模型保持一致性——更輕松地集成Hibernate/JPA編程模型是“一開始就致力要實(shí)現(xiàn)的目標(biāo)”。
Emmanuel在實(shí)踐中給出了幾個(gè)具體的實(shí)例,包括:
◆通過轉(zhuǎn)換對象構(gòu)造的方式,HQL查詢語句可以被轉(zhuǎn)換為搜索查詢,“通常只是幾行代碼”——其他的因素(執(zhí)行查詢,結(jié)果格式等)都保持不變;
◆不需要啟動過程,因?yàn)镠ibernate Search透明地利用了已有的Hibernate/JPA基礎(chǔ)架構(gòu);
◆最小配置集合要求至少在persistence.xml或者h(yuǎn)ibernate.cfg.xml中設(shè)置兩個(gè)屬性。
關(guān)于最終發(fā)布時(shí)間表,Emmanuel指出3.0版本發(fā)布之前將在查詢和索引***化方面做出大量的工作,他就此總結(jié)道:
Hibernate Search的核心代碼實(shí)際上是相當(dāng)穩(wěn)定的,發(fā)布版之所以仍標(biāo)記為Beta的原因是我們對拓展API接口還沒有充足的把握,Hibernate Search內(nèi)核相當(dāng)靈活,并且可以融入用戶自定制的搜索策略。到目前為止,代碼已經(jīng)相對穩(wěn)定,我們希望看到一個(gè)具備完善特性的產(chǎn)品,并保證API接口不會出現(xiàn)問題。
如同平常一樣,開源項(xiàng)目在編碼完成時(shí)發(fā)布,我所要說的就是這個(gè)夏天很長并且我沒有安排什么額外的度假計(jì)劃 :)
關(guān)于Hibernate Search實(shí)現(xiàn)策略好處和不足的有趣爭論也隨之展開,Sanjiv Jivan就此描述了他眼中的Hibernate Search優(yōu)缺點(diǎn),隨后Emmanuel Bernard也回應(yīng)了Sanjiv的看法。那么,親愛的讀者,對于Hibernate Search,您的觀點(diǎn)又是如何呢?
【編輯推薦】