« JBoss AS 7.1 に移行(3) | トップページ | Hibernate Search 関連(2) »

2013年2月11日 (月)

Hibernate Search 関連(1)

OpenDolphin における hibernate search 導入のフロンティアといえば何といっても増田先生である。現在当院で使っているコードは増田先生の初期バージョンのものであるが,今回 JBoss AS 7.1 導入に合わせて,最新版の 2.3m から hibernate search 関連部分コードを使わせていただいて導入した。初期バージョンでは ModuleModel で index されていたが,現在の 2.3m では DocumentModel に index するように変更されている。

  • ModuleModel.java: @Indexed をコメントアウト
    @Entity
    //@Indexed(index="module")   // masuda
    @Table(name = "d_module")
    public class ModuleModel extends KarteEntryBean {    
     :
        @Lob
        // masuda
        @Field(index = Index.YES)
        @FieldBridge(impl = ModuleModelBridge.class)
        @Analyzer(impl = CJKAnalyzer.class)
        // masuda
    
  • DocumentModel.java: @Indexed して,modules を @IndexEmbedded する
    @Indexed(index="document")      // hibernate search
    @Entity
    @Table(name = "d_document")
    public class DocumentModel extends KarteEntryBean {
     :
        @IndexedEmbedded        // hibernate search
        @OneToMany(mappedBy="document", cascade={CascadeType.PERSIST, CascadeType.REMOVE})
        private Collection

    modules;

  • RemoteDocumentPeekerServiceImpl.java: ModuleModel に対して行っていた操作を DocumentModel に変更する。
    public void clearIndex() {
      FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(em);
      fullTextEntityManager.purgeAll(DocumentModel.class);
      :
    public void makeInitialIndex(Long fromId, Long toId) {
      final FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(em);
      final String sql = "from DocumentModel m where m.status = 'F' and m.id >= :min and m.id < :max";
            
      List<DocumentModel> modules = em.createQuery(sql)
     :
      for (DocumentModel dm : modules) {
                fullTextEntityManager.index(dm);
     :
    public List

    getPatientOfKarte(String text) {  :   final Analyzer analyzer = fullTextEntityManager.getSearchFactory().getAnalyzer(DocumentModel.class);  :     org.apache.lucene.queryParser.QueryParser parser = new QueryParser(ver, "modules.beanBytes", analyzer);  :

  • RemoteKarteServiceImpl.java: addDocument と deleteDocument に index 消去の処理を加える。(増田先生バージョンでは仮保存文書の更新処理と,再帰的文書削除処理も作られていたので,それもほぼそのまま使わせていただいた)
    @Override
    public long addDocument(DocumentModel document) {
     :        
       // オリジナルを取得し 終了日と status = M を設定する
       DocumentModel old = em.find(DocumentModel.class, parentPk);
       old.setEnded(ended);
       old.setStatus(STATUS_MODIFIED);
                
       // HibernateSearchのFulTextEntityManagerを用意。修正済みのものはインデックスから削除する by masuda-sensei
       final FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(em);
       fullTextEntityManager.purge(DocumentModel.class, parentPk);
     :
    

« JBoss AS 7.1 に移行(3) | トップページ | Hibernate Search 関連(2) »

OpenDolphin」カテゴリの記事