elasticsearch,hibernate-search,Spring Boot,elasticsearch,Hibernate Search" /> elasticsearch,hibernate-search,Spring Boot,elasticsearch,Hibernate Search" />

Spring boot 弹簧靴&x2B;Hibernate搜索:已忽略必需的索引状态?

Spring 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-

将HibernateSearch连接到Elasticsearch时,我注意到当我部署一个非HibernateSearch时,我的服务将无法成功连接。在我看来,设置所需索引状态的环境变量被忽略。我正在寻找一个打字错误或类似的半小时了,但找不到任何东西

pom.xml

<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
中的自定义环境变量,并设置该自定义环境变量,而不是您所做的操作。

我怀疑这也是一个问题,但我读过,因此认为它应该是正确的。我将尝试自定义环境变量,看看会发生什么,这样我们就有了更多的数据。您应该使用工件ID
hibernate 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
}