Привет. В моем проекте SpringBoot я настроил эластичный поиск с использованием JPA. Я использую для этого ElasticsearchRepository. Теперь для конфигурации, когда я использую localhost, все работает нормально, но когда я указываю IP-адрес, я сталкиваюсь с исключением:
org.elasticsearch.client.transport.NoNodeAvailableException: None of the configured nodes are available: [{#transport#-1}{lDnuVli1Rriy-9j1pdozZA}{27.101.12.99}{27.101.12.99:9300}] at org.elasticsearch.client.transport.TransportClientNodesService.ensureNodesAreAvailable(TransportClientNodesService.java:347) ~[elasticsearch-5.6.11.jar:5.6.11] at org.elasticsearch.client.transport.TransportClientNodesService.execute(TransportClientNodesService.java:245) ~[elasticsearch-5.6.11.jar:5.6.11] at org.elasticsearch.client.transport.TransportProxyClient.execute(TransportProxyClient.java:59) ~[elasticsearch-5.6.11.jar:5.6.11] at org.elasticsearch.client.transport.TransportClient.doExecute(TransportClient.java:366) ~[elasticsearch-5.6.11.jar:5.6.11] at org.elasticsearch.client.support.AbstractClient.execute(AbstractClient.java:408) ~[elasticsearch-5.6.11.jar:5.6.11] at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:80) ~[elasticsearch-5.6.11.jar:5.6.11] at org.elasticsearch.action.ActionRequestBuilder.execute(ActionRequestBuilder.java:54) ~[elasticsearch-5.6.11.jar:5.6.11] at org.springframework.data.elasticsearch.core.ElasticsearchTemplate.index(ElasticsearchTemplate.java:571) ~[spring-data-elasticsearch-3.0.10.RELEASE.jar:3.0.10.RELEASE] at org.springframework.data.elasticsearch.repository.support.AbstractElasticsearchRepository.save(AbstractElasticsearchRepository.java:156) ~[spring-data-elasticsearch-3.0.10.RELEASE.jar:3.0.10.RELEASE] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_151] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_151] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_151] at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_151]
Код для инициализации Elastic Search —
@Bean
public Client client() throws Exception {
Settings settings = Settings.builder()
.put("cluster.name",getElasticCluster())
.build();
return new PreBuiltTransportClient(Settings.EMPTY)
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(getElasticHost()),getElasticPort()));
}
@Bean
public ElasticsearchOperations elasticsearchTemplate() throws Exception {
return new ElasticsearchTemplate(client());
}
elasticsearch: jest: proxy: host: 27.101.12.99 port: 9300
У меня было много поиска, но ничего не помогло в моем случае. Поэтому, пожалуйста, проверьте и помогите.
да, мы запускаем кластер. Когда я пишу curl <Ip:9200>, это дает мне результат - { "имя" : "7FNHH-9", "имя_кластера" : "elasticsearch", "cluster_uuid": "yghFr84lQZ6BLAIIfDOc3w", "версия": { "номер ": "5.6.3", "build_hash": "1a2f265", "build_date": "2017-10-06T20:33:39.012Z", "build_snapshot": false, "lucene_version": "6.6.1" }, «слоган»: «Знаете, для поиска» } и когда я пишу curl<IP:9300>, то его отображение не удалось подключиться.
какая версия вашего кластера? у вас активирован транспорт на порту 9300?
Возможно ли, что вы начнете использовать версию 7.0.1 Elastic?




Клиент elasticsearch в вашем приложении подключается к кластеру, используя транспортный протокол. Этот подход устарел и уже удален в последних выпусках. Этот транспортный протокол не является HTTP, и ваш прокси-сервер шутки, вероятно, не может анализировать/издеваться над отправляемыми данными. Это причина, по которой localhost работает, а прокси jest не работает.
Чтобы ваше приложение было совместимо с будущими выпусками elasticsearch, вам следует рассмотреть возможность использования высокоуровневого клиента REST без потери каких-либо функций для весеннего приложения. И в качестве быстрого выигрыша вы снова сможете использовать jest, потому что клиент REST использует HTTP для связи с elasticsearch.
Пожалуйста, ознакомьтесь с подробностями о миграции клиента (я предположил, что версия elasticsearch основана на трассировке стека, дважды проверьте ее) https://www.elastic.co/guide/en/elasticsearch/client/java-rest/5.6/java-rest-high-level-migration.html
Спасибо за Ваш ответ. Есть еще некоторые сомнения. На данный момент я использую Spring Data ElasticSearch, config, ElasticSearchRepository, тогда, если я собираюсь использовать клиент высокого уровня Java Rest, то как я могу интегрировать клиент отдыха высокого уровня с Spring Data ElasticSearch.
@ibeexit теперь я использую HighLevelRestApi и исключаю транспортный клиент, и все работает нормально. Спасибо за Ваш ответ.
рад слышать. счастливого кодирования!
Похоже, это может быть проблема с сетью. Порт 9300 обычно используется для связи внутри узла. Вы запускаете кластер? Если вы просто пытаетесь использовать REST API, то я ожидал увидеть ваш код, вызывающий порт 9200. Можете ли вы свернуть IP + порт из этого ящика?