休止状態の検索実装用にいくつかの JUnit を作成しています。
私はHSSQLインメモリデータベースを使用しています。DBUnit を使用して、この DB (XML ファイル) にデータを入力します。他の非検索テストが同じデータで機能するため、これは間違いなく機能します。Web アプリで試してみたところ、検索コードは確実に機能し、正しいレコードが返されます。
Hibernate Search は、Hibernate を使用して挿入されたデータベース エントリのみをインデックスに登録すると想定しています。次を使用して手動でデータベースにインデックスを付けようとしました:-
fullTextEntityManager.createIndexer().startAndWait();
これをSpringの初期化後に実行されるBeanに入れました
public class SearchIndexer {
@Autowired
private EntityManagerFactory entityManagerFactory;
public SearchIndexer(){
}
@PostConstruct
public void doIndexing(){
EntityManager em = entityManagerFactory.createEntityManager();
FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(em);
try {
fullTextEntityManager.createIndexer().startAndWait();
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
また、それを JUnit クラスに Autowired し、doIndexing メソッドを手動で実行しました (データがロードされた後に正しく取得されていることを確認するため)。
@Before
public void setup() throws Exception{
dbUnitAdapter.setup("ClubDaoTest.xml");
searchIndexer.doIndexing();
super.before();
}
dbUnitAdapter は単純に XML ファイルを取得し、DBUnit を使用してデータベースに挿入します。
エンティティには次のように注釈が付けられます: -
@Field
private String name;
@NotBlank
private String type;
@Field
private String address1;
@Field
private String county;
@Field
private String address2;
@Field
private String town;
@Field
private String country;
@Field
private String postcode;
private String telephone;
private String mobile;
private String fax;
@Field
private String email;
@Field
@NumericField
private long lft;
@Field
@NumericField
private long rgt;
また、休止状態を使用してデータを挿入しようとしました (Club エンティティを作成します) が、これも紛らわしく機能しませんでした。検索インデックスの場所を RAM からファイルシステムに変更し、luke を使用して読み取りました。Luke を使うのは初めてでしたが、hibernate を使用して挿入しようとしたデータは表示されましたが、それ以外のデータは表示されなかったので、間違っている可能性があります。