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」カテゴリの記事
- IME on/off の切り替え(2024.09.03)
- 促音拗音の検索(2024.09.01)
- Java 17 への移行(7) - OpenDolphin client の対応 (2023.02.04)
- Java 17 への移行(6) - Hibernate 6 でやらかす(2023.02.03)
- Java 17 への移行(5) - OpenDolphin server の対応(2023.02.02)