2017-02-07 8 views
1

Я использую гибернации-поиск-elasticsearch, спящий режим док говорит нам, что когда мы создаем объект с помощью JPA, индекс будет создан автоматически. Я нашел, что моя программа создала сущность успешно, но индекс не создан.поиск спящего режима для elasticsearch с JPA не может автоматически создать индекс, когда JPA создать объект

для использования зимуют-поиска и эс я импортировать гибернации-поиск-elasticsearch баночка

<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; 
    } 
} 

Это все мое configs, я хочу спящий поиск автоматически создавать индекс, когда я использую метод сохранения JPA для создания объекта, b нет.

Спасибо.

ответ

1

для того, чтобы 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> 

Может быть, эта зависимость отсутствует?

+0

мой проект - это старый проект, который использует hibernate core 4.3.8, и если я использую hibernate- search-orm 5.6.0.Final будут некоторые ошибки. поэтому я не использую hibernate-search-orm, просто используйте hibernate-search-elasticsearch напрямую. – diligent

+0

@diligent Вы должны использовать hibernate-search-orm, чтобы автоматическое индексирование объектов Hibernate. –

+0

@diligent Также помните, что Hibernate Search 5.6 поддерживает только Hibernate Core версии 5.0 и 5.1. Боюсь, вам придется либо обновить версию Hibernate Core (что было бы неплохо), либо вы не сможете использовать Hibernate Search. –

0

При включении Elasticsearch indexmanager с помощью этого свойства:

<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 (где «группа» - это имя индекса, я скопировал это из аннотации @Indexed).

+0

Спасибо Sanne. Я переместил свойство directory_provider и indexBase, оставил свойство indexmanager, но по-прежнему не могу создать индекс. – diligent

+0

Откуда вы не знаете индекса? У вас есть какие-либо ошибки? – Sanne

+0

Я просматриваю http: // localhost: 9200/group /? Pretty, который говорит мне, что: index_not_found_exception, его статус равен 404. – diligent