Spring boot 弹簧靴&x2B;Hibernate搜索:已忽略必需的索引状态?
将HibernateSearch连接到Elasticsearch时,我注意到当我部署一个非HibernateSearch时,我的服务将无法成功连接。在我看来,设置所需索引状态的环境变量被忽略。我正在寻找一个打字错误或类似的半小时了,但找不到任何东西 pom.xmlSpring boot 弹簧靴&x2B;Hibernate搜索:已忽略必需的索引状态?,spring-boot,elasticsearch,hibernate-search,Spring Boot,elasticsearch,Hibernate Search,将HibernateSearch连接到Elasticsearch时,我注意到当我部署一个非HibernateSearch时,我的服务将无法成功连接。在我看来,设置所需索引状态的环境变量被忽略。我正在寻找一个打字错误或类似的半小时了,但找不到任何东西 pom.xml <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.7.RELEASE</version>
</parent>
...
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-search</artifactId>
<version>5.11.1.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-search-elasticsearch</artifactId>
<version>5.11.0.Final</version>
</dependency>
环境变量:
$ kubectl describe pod <NAME>
Environment:
...
SPRING_JPA_PROPERTIES_HIBERNATE_SEARCH_DEFAULT_INDEXMANAGER: elasticsearch
SPRING_JPA_PROPERTIES_HIBERNATE_SEARCH_DEFAULT_ELASTICSEARCH_HOST: elasticsearch
SPRING_JPA_PROPERTIES_HIBERNATE_SEARCH_DEFAULT_ELASTICSEARCH_REQUIRED_INDEX_STATUS: yellow
日志消息2:
Caused by: org.hibernate.search.exception.SearchException: HSEARCH400007: Elasticsearch request failed.
Request: GET /_cluster/health/myindex with parameters {wait_for_status=green, timeout=10000ms}
Response: 408 'Request Timeout' with body
{
"cluster_name": "my-elastic-cluster",
"status": "yellow",
"timed_out": true,
"number_of_nodes": 1,
"number_of_data_nodes": 1,
"active_primary_shards": 5,
"active_shards": 5,
"relocating_shards": 0,
"initializing_shards": 0,
"unassigned_shards": 5,
"delayed_unassigned_shards": 0,
"number_of_pending_tasks": 0,
"number_of_in_flight_fetch": 0,
"task_max_waiting_in_queue_millis": 0,
"active_shards_percent_as_number": 50.0
}
我们可以清楚地看到它正在等待状态“绿色”而不是“黄色”。我相信您的环境变量
SPRING\u JPA\u PROPERTIES\u HIBERNATE\u SEARCH\u DEFAULT\u ELASTICSEARCH\u REQUIRED\u INDEX\u status
正在被转换为SPRING.JPA.PROPERTIES.HIBERNATE.SEARCH.DEFAULT.ELASTICSEARCH.REQUIRED.INDEX.status
,然而,它应该翻译成spring.jpa.properties.hibernate.search.default.elasticsearch.required\u index\u status
(注意末尾的下划线)
我不知道Spring如何准确地翻译环境变量名,但必须有一种方法来转义下划线。也许是双下划线?您可能应该看看他们的文档
最糟糕的情况是,您可以将
spring.jpa.properties.hibernate.search.default.elasticsearch.required\u index\u status
设置为application.properties
中的自定义环境变量,并设置该自定义环境变量,而不是您所做的操作。我怀疑这也是一个问题,但我读过,因此认为它应该是正确的。我将尝试自定义环境变量,看看会发生什么,这样我们就有了更多的数据。您应该使用工件IDhibernate search orm
,而不是hibernate search
和2。您应该为hibernate search orm
和hibernate search elasticsearch
使用相同的版本。
Caused by: org.hibernate.search.exception.SearchException: HSEARCH400024: Timed out while waiting for for index 'myindex' to reach status 'green'; status was still 'yellow' after 10000ms.
Caused by: org.hibernate.search.exception.SearchException: HSEARCH400007: Elasticsearch request failed.
Request: GET /_cluster/health/myindex with parameters {wait_for_status=green, timeout=10000ms}
Response: 408 'Request Timeout' with body
{
"cluster_name": "my-elastic-cluster",
"status": "yellow",
"timed_out": true,
"number_of_nodes": 1,
"number_of_data_nodes": 1,
"active_primary_shards": 5,
"active_shards": 5,
"relocating_shards": 0,
"initializing_shards": 0,
"unassigned_shards": 5,
"delayed_unassigned_shards": 0,
"number_of_pending_tasks": 0,
"number_of_in_flight_fetch": 0,
"task_max_waiting_in_queue_millis": 0,
"active_shards_percent_as_number": 50.0
}