hibernate search for elasticsearch with JPA cannot auto create index when jpa create an entity

hibernate search for elasticsearch with JPA can not auto create index when jpa create an entity

我正在使用 hibernate-search-elasticsearch,hibernate 文档告诉我们 当我们使用 jpa 创建实体时,索引将自动创建。我发现我的程序成功创建了实体,但没有创建索引。

为了使用 hibernate-search 和 es 我导入了 hibernate-search-elasticsearch jar

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-search-elasticsearch</artifactId>
    <version>5.6.0.Final</version>
</dependency>

persistence.xml

<persistence-unit name="dev_unit" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
    <mapping-file>META-INF/travel-service/orm.xml</mapping-file>
    <properties>
        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL57InnoDBDialect" />
        <property name="hibernate.show_sql" value="true" />
        <property name="hibernate.format_sql" value="false" />
        <property name="hibernate.ejb.naming_strategy" value="org.hibernate.cfg.ImprovedNamingStrategy" />

        <!--Hibernate JPA-->
        <property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory"/>
        <property name="hibernate.cache.use_second_level_cache" value="false" />
        <property name="hibernate.cache.use_query_cache" value="false" />

        <property name="hibernate.connection.provider_class"
                  value="org.hibernate.hikaricp.internal.HikariCPConnectionProvider" />
        <property name="hibernate.hikari.dataSourceClassName" value="com.mysql.jdbc.jdbc2.optional.MysqlDataSource" />
        <property name="hibernate.hikari.minimumIdle" value="5" />
        <property name="hibernate.hikari.maximumPoolSize" value="10" />
        <property name="hibernate.hikari.idleTimeout" value="30000" />
        <property name="hibernate.hikari.dataSource.url" value="jdbc:mysql://127.0.0.1:3306/travel?useUnicode=true&amp;charset=utf8mb4amp;autoReconnect=true" />
        <property name="hibernate.hikari.dataSource.user" value="root" />
        <property name="hibernate.hikari.dataSource.password" value="111111" />

        <!-- search -->
        <property name="hibernate.search.default.directory_provider" value="filesystem"/>
        <property name="hibernate.search.default.indexBase" value="/Users/yybbk/index"/>
        <property name="hibernate.search.elasticsearch.host" value="http://localhost:9200" />
        <property name="hibernate.search.default.indexmanager" value="elasticsearch"/>
        <property name="hibernate.search.default.elasticsearch.required_index_status" value="yellow"/>
        <property name="hibernate.search.default.elasticsearch.index_schema_management_strategy" value="CREATE"/>
        <property name="hibernate.search.default.elasticsearch.refresh_after_write" value="true"/>

    </properties>
</persistence-unit>

我的实体:

@Entity
@Table(name = "groups")
@Indexed(index = "group")
public class Group {
    private Long id;
    private Long projectId;
    private String name;

    @Id
    @Column(name = "id")
    @GeneratedValue(strategy= GenerationType.AUTO)
    @Field
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @Basic
    @Column(name = "project_id")
    @Field
    public Long getProjectId() {
        return projectId;
    }

    public void setProjectId(Long projectId) {
        this.projectId = projectId;
    }


    @Basic
    @Column(name = "name")
    @Field
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }   
}

这就是我的所有配置,我想在使用 JPA 保存方法创建实体时让休眠搜索自动创建索引,但没有。

谢谢。

使用此 属性 启用 Elasticsearch 索引管理器时:

<property name="hibernate.search.default.indexmanager" value="elasticsearch"/>

这将获取在 Elasticsearch 上创建的索引,而不是 本地 Lucene 索引。

基本上忽略了这些其他选项:

<property name="hibernate.search.default.directory_provider" value="filesystem"/>
<property name="hibernate.search.default.indexBase" value="/Users/yybbk/index"/>

Hibernate Search 应该已经自动在 Elasticsearch 上创建了索引。 您应该能够使用指向 http://localhost:9200/group/?pretty 的浏览器进行检查(其中 "group" 是索引名称,我从您的 @Indexed 注释中复制了它)。

为了让 Hibernate Search 插入到 Hibernate ORM 中,并在实体持久化时对其进行索引,您还需要添加 org.hibernate:hibernate-search-orm 模块作为项目的依赖项:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-search-orm</artifactId>
    <version>5.6.0.Final</version>
</dependency>

也许缺少此依赖项?