朋友们,我正在使用elastic search
开发spring boot项目我在本地计算机上设置了弹性搜索,并且我在弹性搜索中安装了Head
插件。我的弹性搜索设置正确显示绿色标志。
我的项目中的application-dev.yml文件如下:
server:
port: 8080
liquibase:
context: dev
spring:
profiles:
active: dev
datasource:
dataSourceClassName: org.h2.jdbcx.JdbcDataSource
url: jdbc:h2:mem:jhipster;DB_CLOSE_DELAY=-1
databaseName:
serverName:
username:
password:
jpa:
database-platform: com.aquevix.demo.domain.util.FixedH2Dialect
database: H2
openInView: false
show_sql: true
generate-ddl: false
hibernate:
ddl-auto: none
naming-strategy: org.hibernate.cfg.EJB3NamingStrategy
properties:
hibernate.cache.use_second_level_cache: true
hibernate.cache.use_query_cache: false
hibernate.generate_statistics: true
hibernate.cache.region.factory_class: org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory
data:
elasticsearch:
cluster-name: elasticsearch
cluster-nodes: localhost:9200
messages:
cache-seconds: 1
thymeleaf:
mode: XHTML
cache: false
activemq:
broker-url: tcp://localhost:61616
metrics:
jmx.enabled: true
spark:
enabled: false
host: localhost
port: 9999
graphite:
enabled: false
host: localhost
port: 2003
prefix: TestApollo
cache:
timeToLiveSeconds: 3600
ehcache:
maxBytesLocalHeap: 16M
弹性搜索服务正在我的机器上运行,但是当我尝试首先保存实体我的代码保存实体在mysql中然后在弹性搜索中使用elastic search repository
但是在将实体保存为弹性时会抛出错误:
Hibernate: insert into EMPLOYEE (id, rollno) values (null, ?)
[ERROR] com.aquevix.demo.aop.logging.LoggingAspect - Exception in com.aquevix.demo.web.rest.EmployeeResource.create() with cause = null
org.elasticsearch.client.transport.NoNodeAvailableException: None of the configured nodes are available: []
at org.elasticsearch.client.transport.TransportClientNodesService.ensureNodesAreAvailable(TransportClientNodesService.java:298) ~[elasticsearch-1.3.2.jar:na]
at org.elasticsearch.client.transport.TransportClientNodesService.execute(TransportClientNodesService.java:214) ~[elasticsearch-1.3.2.jar:na]
at org.elasticsearch.client.transport.support.InternalTransportClient.execute(InternalTransportClient.java:105) ~[elasticsearch-1.3.2.jar:na]
at org.elasticsearch.client.support.AbstractClient.index(AbstractClient.java:94) ~[elasticsearch-1.3.2.jar:na]
at org.elasticsearch.client.transport.TransportClient.index(TransportClient.java:331) ~[elasticsearch-1.3.2.jar:na]
at org.elasticsearch.action.index.IndexRequestBuilder.doExecute(IndexRequestBuilder.java:313) ~[elasticsearch-1.3.2.jar:na]
at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:91) ~[elasticsearch-1.3.2.jar:na]
at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:65) ~[elasticsearch-1.3.2.jar:na]
at org.springframework.data.elasticsearch.core.ElasticsearchTemplate.index(ElasticsearchTemplate.java:431) ~[spring-data-elasticsearch-1.1.3.RELEASE.jar:na]
at org.springframework.data.elasticsearch.repository.support.AbstractElasticsearchRepository.save(AbstractElasticsearchRepository.java:138) ~[spring-data-elasticsearch-1.1.3.RELEASE.jar:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_51]
我也使用9300
端口而不是9200
,但没有任何效果。我已经尝试了所有方法,但可以找到解决方案,请帮忙!
答案 0 :(得分:3)
我发现解决方案ES2.0运行不正常所以我重新安装ES1.7.3现在它正在我的情况下工作。 complete details here!
答案 1 :(得分:2)
我遇到了和你一样的问题,也使用了Jhipster。如上所述,一个可能的解决方案是降级你的elasticsearch实例,但如果你不想降级它,这就是它对我有用的东西:
如果您需要更多信息,请查看此帖子: http://ignaciosuay.com/how-to-connect-spring-boot-to-elasticsearch-2-x-x/
答案 2 :(得分:1)
我遇到此错误,对我来说,原因是我使用了不正确的群集名称。
解决此错误的步骤:
确保Spring Data Elasticsearch与要使用的Elasticsearch版本兼容。项目的自述文件中有一个表,该表将Spring Data Elasticsearch版本与Elasticsearch版本相对应:
https://github.com/spring-projects/spring-data-elasticsearch#quick-start
就我而言,我正在使用Spring Data Elasticsearch 3.0.7。根据该表,我需要使用Elasticsearch 5.5.0,但是我发现Spring Data Elasticsearch 3.0.7似乎也与Elasticsearch 5.6.x兼容。
确保spring.data.elasticsearch.cluster-nodes
属性指定您的Elasticsearch集群使用本机Elasticsearch传输协议进行通信的端口。
默认情况下,Elasticsearch侦听两个端口9200和9300。端口9200用于使用RESTful API进行通信。端口9300用于使用传输协议进行通信:
https://www.elastic.co/guide/en/elasticsearch/guide/current/_talking_to_elasticsearch.html
Spring Data Elasticsearch使用的Java客户端期望使用传输协议(默认为9300)进行通信。
确保spring.data.elasticsearch.cluster-name
属性指定正确的群集名称。
如果您未专门设置此属性,则默认值为“ elasticsearch”。
您可以使用RESTful API查找Elasticsearch集群名称:
curl -XGET 'http://localhost:9200/?pretty'
此命令将打印类似于:
{ "name" : "XXXXXXX", "cluster_name" : "some_cluster_name", "cluster_uuid" : "XXXXXXXXXXXXXXXXXXXXXX", "version" : { "number" : "5.6.10", "build_hash" : "b727a60", "build_date" : "2018-06-06T15:48:34.860Z", "build_snapshot" : false, "lucene_version" : "6.6.1" }, "tagline" : "You Know, for Search" }
请确保将spring.data.elasticsearch.cluster-name
属性的值设置为“ cluster_name”所示的相同字符串。
答案 3 :(得分:0)
您似乎正在使用JHipster(如果我可以添加的精彩工具集),它使用
org.springframework.boot:spring-boot-starter-data-elasticsearch: - > 1.3.3.RELEASE
这仅适用于ElasticSearch BELOW 2.0,因此只需安装ElasticSearch 1.7.3并运行代码
即可