<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Terry.Li-彬

    虛其心,可解天下之問;專其心,可治天下之學;靜其心,可悟天下之理;恒其心,可成天下之業。

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      143 隨筆 :: 344 文章 :: 130 評論 :: 0 Trackbacks

    不久前Hibernate推出了Hibernate Search 3.0 GA,由它的名字大家也可以大概猜到它的作用是對數據庫中的數據進行檢索的。它是hibernate對著名的全文檢索系統Lucene的一個集成方案,作 用在于對數據表中某些內容龐大的字段(如聲明為text的字段)建立全文索引,這樣通過hibernate search就可以對這些字段進行全文檢索后獲得相應的POJO,從而加快了對內容龐大字段進行模糊搜索的速度(sql語句中like匹配)。

    Hibernate Search運行的環境如下:

    1、JDK或JRE 5.0以上

    2、Hibernate-Search以及相應的依賴包

    3、Hibernate Core 3.2.X

    4、Hibernate Annotations 3.3.X

    一、配置

    使用過Lucene的人都知道,Lucene是使用Directory這個概念來存儲索引文件的,所以在Hibernate Search中提供了一個初始化、配置化的工廠類DirectoryProvider來生成相應的Directory。而在這里,我使用了 FSDirectoryProvider這個工廠類,其中FS代表文件系統,意思是索引文件保存在文件系統中。因此,我們在hibernate.cfg.xml文件中加入了一下內容:

    xml 代碼
    1. < property ? name = "hibernate.search.default.directory_provider" > ??
    2. ??????????org.hibernate.search.store.FSDirectoryProvider ??
    3. </ property > ??
    4. < property ? name = "hibernate.search.default.indexBase" > ??
    5. ??????????E:/temp/index ??
    6. </ property > ??

    其中屬性hibernate.search.default.indexBase代表索引文件默認的保存位置。

    這些屬性設置完成后,接下來就是使用Annotation對指定POJO的指定屬性進行配置了。如下:

    java 代碼
    1. @Indexed (index?=? "text" ) ??
    2. public ? class ?Text? implements ?java.io.Serializable ??
    3. { ??
    4. ???? @DocumentId ??
    5. ???? private ?Integer?id; ??
    6. ??
    7. ???? private ?String?fileName; ??
    8. ??
    9. ???? private ?String?filePath; ??
    10. ??
    11. ???? @Field (name?=? "content" ,?store?=?Store.NO,?index?=?Index.TOKENIZED,?analyzer?=? @Analyzer (impl?=?ChineseAnalyzer. class )) ??
    12. ???? private ?String?content; ??
    13. ??
    14. ????...... ??
    15. }??

    其中@Indexed用于標示需要建立全文索引的實體類,它包含一個屬性index用于標示這個全文索引的名字

    @DocumentId用于標示實體類中的唯一的屬性保存在索引文件中,是當進行全文檢索時可以這個唯一的屬性來區分索引中其他實體對象,一般使用實體類中的主鍵屬性

    @Field就是用來標示Lucene的Field字段,其中name屬性用于標示Field的名稱,store屬性用于標示這個屬性的內容是否需要保存在索引中,index屬性標示該字段屬性是否進行分詞(Index.TOKENIZED),analyzer用于標示建立索引時所使用的分析器是什么類,這里使用Lucene自帶的ChineseAnalyzer


    二、建立索引

    配置完成以上設置之后,Hibernate Search的配置工作算是大功告成了,剩下的就是如何在編碼時使用到Hibernate Search。其實Hibernate Search的使用與我們平時Hibernate的使用基本一致,索引的建立工作是可以由Hibernate Search后臺自動處理的,無需手工操作,其中的主要差別有

    1、Configuration

    由于本文中Hibernate Search配置是由Annotation來完成的,所以我們在初始化Configuration、SessionFactory、Session時應該這樣寫:

    java 代碼
    1. factory?=? new ?AnnotationConfiguration().configure(file).buildSessionFactory();??

    使用AnnotationConfiguaration來代理平常使用的Configuration

    2、Session

    要使用Hibernate Search的功能就不能單純使用平常的Session來開始事務,進行數據庫操作,而是應該改用FullTextSession

    java 代碼
    1. //獲取Session ??
    2. Session?session?=?HibernateUtil.getSession(); ??
    3. //封裝Session為FullTextSession ??
    4. FullTextSession?fullTextSession?=?Search.createFullTextSession(session); ??
    5. ??
    6. //開始事務 ??
    7. Transaction?tx?=?fullTextSession.beginTransaction(); ??
    8. ??
    9. ...... ??
    10. ??
    11. //提交事務 ??
    12. tx.commit(); ??
    13. //關閉會話 ??
    14. fullTextSession.close();??

    這樣,我們使用FullTextSession進行save,update,delete操作hibernate search將會自動根據配置在后臺對相應的域建立全文索引了


    三、檢索

    接下來就是說一下如何使用全文檢索功能來檢索實體對象了。

    java 代碼
    1. Session?session?=?HibernateUtil.getSession(); ??
    2. FullTextSession?fullTextSession?=?Search.createFullTextSession(session); ??
    3. ??
    4. Transaction?tx?=?fullTextSession.beginTransaction(); ??
    5. ??
    6. QueryParser?parser?=? new ?QueryParser( "content" ,? new ?ChineseAnalyzer()); ??
    7. ??
    8. Query?query?=?fullTextSession.createFullTextQuery(parser.parse(word), ??
    9. ????????Text. class ); ??
    10. ??
    11. List?result?=?query.list(); ??
    12. for ?( int ?i?=? 0 ;?result?!=? null ?&&?i?<?result.size();?i++) ??
    13. { ??
    14. ????Text?pojo?=?(Text)?result.get(i); ??
    15. ????System.out.println( "文件名:" ?+?pojo.getFileName()); ??
    16. ????System.out.println( "文件路徑:" ?+?pojo.getFilePath()); ??
    17. ????System.out.println(); ??
    18. } ??
    19. ??
    20. tx.commit(); ??
    21. fullTextSession.close();??

    首先是建立相應的QueryParser由他來對輸入的關鍵字進行切分后產生Lucene下的Query實例,最后通過 FullTextSession的createFullTextQuery方法生成hibernate下的Query實例,執行list方法即可獲得查詢 的實例結果集合。

    四、完

    posted on 2010-09-03 08:46 禮物 閱讀(1032) 評論(0)  編輯  收藏 所屬分類: Hibernate Search

    只有注冊用戶登錄后才能發表評論。

    網站導航:
     
    主站蜘蛛池模板: 最近高清中文字幕无吗免费看| 日韩精品视频在线观看免费| 毛片在线全部免费观看| yy6080久久亚洲精品| 污污免费在线观看| 亚洲精品第一国产综合境外资源| 污网站免费在线观看| 亚洲AV无码不卡在线观看下载| 无码精品人妻一区二区三区免费| 国产一卡二卡≡卡四卡免费乱码| 狼人大香伊蕉国产WWW亚洲| 亚洲 自拍 另类小说综合图区| www在线观看免费视频| 久久久久亚洲精品天堂久久久久久| 国产乱妇高清无乱码免费| 精品亚洲综合在线第一区| 6080午夜一级毛片免费看 | 国产成人精品日本亚洲直接 | www.免费在线观看| 亚洲日本一线产区和二线产区对比| 日本一区二区三区日本免费| 一级a性色生活片久久无少妇一级婬片免费放 | 一本色道久久88综合亚洲精品高清| 免费高清A级毛片在线播放| 国产精品亚洲mnbav网站| 久久青草精品38国产免费| 亚洲天堂中文字幕在线观看| 成人免费视频小说| 一级毛片试看60分钟免费播放| 亚洲午夜福利在线观看| 精品一区二区三区免费毛片爱| 亚洲午夜精品一区二区麻豆| 国产人成免费视频| 在线观看免费无码专区| 亚洲三级在线视频| 区久久AAA片69亚洲| 国产免费丝袜调教视频| 美美女高清毛片视频黄的一免费 | 四虎成人免费网址在线| 成人A毛片免费观看网站| 亚洲成人黄色在线|