1

休止状態の検索実装用にいくつかの 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 を使用して挿入しようとしたデータは表示されましたが、それ以外のデータは表示されなかったので、間違っている可能性があります。

4

0 に答える 0