Hibernate Search不为数据库中的项目建立索引

wvp

我正在尝试将Hibernate Search集成到我的应用程序中。所需要做的粗略总结:

  • Spring Batch读取XML文件并将对象持久保存到数据库中。这是通过de JDBCBatchItemWriter完成的。不是因为性能较慢而使用HibernateItemWriter。
  • 插入所有项目后,我想建立Hibernate Search / Lucene索引。

问题出在最后一步。什么都没有被索引。

设置如下:

有一个JobListener,我可以在其中索引数据库中的数据,如下所示:

Session session = sessionFactory
 .withOptions()
 .openSession();
FullTextSession fullTextSession = Search.getFullTextSession(session);
try {
  fullTextSession.createIndexer().startAndWait();
} catch (InterruptedException e) {
  e.printStackTrace();
}

但是,当我用Luke检查索引时,在其中找不到任何记录。我想这与交易有关,但我不知道如何使它工作。

这是我的持久性配置:

    @Bean
  public EntityManagerFactory entityManagerFactory() {
    HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
    LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();
    entityManagerFactoryBean.setPackagesToScan("xxx.data.domain");
    entityManagerFactoryBean.setJpaVendorAdapter(vendorAdapter);
    entityManagerFactoryBean.setDataSource(dataSource());
    entityManagerFactoryBean.getJpaPropertyMap().putAll(jpaProperties());
    entityManagerFactoryBean.afterPropertiesSet();

    return entityManagerFactoryBean.getObject();
  }


  @Bean
  public FullTextEntityManager fullTextEntityManager(EntityManager entityManagerFactory) throws InterruptedException {
    FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(entityManagerFactory);
    fullTextEntityManager.createIndexer().startAndWait();
    return fullTextEntityManager;
  }

  private Map<String, String> jpaProperties() {
    Map<String, String> jpaProperties = new HashMap<String, String>();
    jpaProperties.put("hibernate.dialect", "org.hibernate.dialect.OracleDialect");
    jpaProperties.put("hibernate.search.default.directory_provider", "filesystem");
    jpaProperties.put("hibernate.search.default.indexBase", "/tmp/lucene/indexes");
    jpaProperties.put("hibernate.search.indexing_strategy", "manual");
    return jpaProperties;
  }


  @Bean
  public SessionFactory sessionFactory(DataSource dataSource) throws IOException {
    LocalSessionFactoryBean localSessionFactoryBean = new LocalSessionFactoryBean();
    localSessionFactoryBean.setDataSource(dataSource);
    localSessionFactoryBean.setPackagesToScan("xxx.data.domain");
    localSessionFactoryBean.afterPropertiesSet();

    return localSessionFactoryBean.getObject();
  }

要索引的实体:

@Entity
@Table(name = "MY_TABLE")
@Indexed
public class EntryEntity {
  public static final String SEQUENCE_NAME = "SEQ_MY_TABLE";

  @Id
  @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = SEQUENCE_NAME)
  @SequenceGenerator(name = SEQUENCE_NAME, sequenceName = SEQUENCE_NAME, allocationSize = 1)
  @Column(name = "ID")
  private Long id;

  @Column(name = "ENTRY_ID")
  @Field(index = Index.YES, analyze = Analyze.NO, store = Store.YES)
  private String entryIdentifier;

  @Column
  @Field(index = Index.YES, analyze = Analyze.NO, store = Store.YES)
  private String value;

  public String getValue() {
    return value;
  }

  public void setValue(String value) {
    this.value = value;
  }
}
哈代

我认为问题在于您在jpaProperties中定义了由实体管理器处理的Search属性但是,当您调用质量索引器时,您使用的是简单的Session在这种情况下,将不会选择JPA属性。我的猜测是,相对于您启动JVM的位置创建了一些索引目录。确实,您应该始终使用EntityManager还有一个org.hibernate.search.jpa.Search可以让您掌握的工具FullTextEntityManager

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Hibernate的创建数据库冗余列

Hibernate数据库关系注释

在hibernate与JDBC或mybatis之间进行选择的最佳实践,仅在数据库中插入而不在Java中的表中建立任何关系

在数据库中搜索Like Hibernate的Integer

Hibernate是否自动在数据库中创建表

Hibernate中的beginTransaction是否分配新的数据库连接?

使用Hibernate @Index注释在数据库上创建索引

使用Spring Hibernate Sessionfactory从数据库中选择一个项目

强制Hibernate查询访问数据库

在Hibernate Search中索引数据

Hibernate无法从数据库中获取SequenceInformation

Hibernate未更新数据库记录

Hibernate自己在数据库中创建列

在多个数据库实例中使用Hibernate-search

使用Hibernate从数据库中检索元素

如何在Hibernate中从数据库中获取数据

Hibernate数据库如何独立?

使用hibernate JPA,mysql数据库,创建索引错误

Hibernate Search索引单个租户

Hibernate应该只更新数据库中的某些字段

Hibernate Criteraia无法从数据库中检索数据

org.hibernate.HibernateException:在Hibernate Search中建立索引时出错(在事务完成之前)

PostgreSQL JPA Hibernate创建数据库

在数据库中搜索文本(使用Hibernate Search)

Sybase / hibernate数据库性能

Hibernate 重复的数据库条目

无法使用 Hibernate 在数据库中创建表

Hibernate Search:将 Lucene 索引持久化到数据库中

Hibernate Search:在没有数据库事务的情况下执行搜索查询