1

У меня есть приложение Spring Boot, и я хочу использовать Elastic search 2.2.0 автономный (не встроенный сервер) в нем, я хочу использовать Spring Data Elastic search, так что Вертикальные поисковые версии с помощью Spring Data и как его настроить для подключения к экземпляру elasticsearch, запущенного в localhost: 9200?Весенние данные Упругий поиск в приложении Spring Boot

На самом деле, я пытался добавить эти опции в мой файл application.properties:

spring.data.elasticsearch.repositories.enabled=true 
spring.data.elasticsearch.cluster-nodes=localhost:9200 

И потом, я создал этот класс конфигурации:

@Configuration 
public class ElasticConfig { 

    @Bean 
    public ElasticsearchOperations elasticsearchTemplate() { 
     return new ElasticsearchTemplate(client()); 
    } 

    @Bean 
    public Client client() { 
     TransportClient client = new TransportClient(); 
     TransportAddress address = new InetSocketTransportAddress(
       "localhost",9200); 
     client.addTransportAddress(address); 
     return client; 
    } 
} 

Я получаю эту StackTrace:

2016-04-28 00: 03: 52.246 INFO 25613 --- [restartedMain] org.elasticsearch.plugins: [Aardwolf ] загружен [], сайты [] 2016-04-28 00: 04: 01.356 INFO 25613 --- [restartedMain] org.elasticsearch.client.transport: [Aardwolf] не удалось получить информация о узле для [#transport # -1] [Фати-HP-Pavilion-g6-Notebook-PC] [инет [локальный/127.0.0.1: 9200]], отключая ...

org.elasticsearch.transport.ReceiveTimeoutTransportException: [] [ inet [localhost/127.0.0.1: 9200]] [cluster: monitor/nodes/info] request_id [0] отключен после [5001ms] в org.elasticsearch.transport.TransportService $ TimeoutHandler.run (TransportService.java:529)) ~ [elasticsearch-1.5.2.jar: na] на java.util.concurrent.ThreadPoolExecutor.ru nWorker (ThreadPoolExecutor.java:1142) ~ [na: 1.8.0_77] на java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:617) ~ [na: 1.8.0_77] на java.lang .Thread.run (Thread.java:745) ~ [на: 1.8.0_77]

2016-04-28 00: 04: 01,512 ОШИБКА 25613 --- [restartedMain] .dersAbstractElasticsearchRepository: не удалось загрузить elasticsearch узлы: org.elasticsearch.client.transport.NoNodeAvailableException: Ни один из сконфигурированные узлы доступны: []

+0

Это только клиент. Проверьте статус сервера elasticsearch. –

+0

@ Gemini Keith: elasticsearch запущен и запущен: http: // localhost: 9200/{ "name": "Hildegarde", "cluster_name": "elasticsearch", "version": { "number": " 2.2.0" , "build_hash": "8ff36d139e16f8720f2947ef62c8167a888992fe", "build_timestamp": "2016-01-27T13: 32: 39Z", "build_snapshot" ложь, "lucene_version": "5.4.1" } , "tagline": "Вы знаете, для поиска" } – jemlifathi

+0

См. Этот ответ: http://stackoverflow.com/a/36858819/4604579. Данные Spring еще не готовы для ES 2.x – Val

ответ

4

Я получил этот ответ с форума ES и работал me:

Во-первых, Spring Data Elasticsearch официально работает с версиями ES 1.x (для меня это работало с 1.7.1). Во-вторых, порт, используемый в конфигурации, должен быть 9300

Я внес эти изменения, и это сработало довольно хорошо.

1

Я читаю официальный документ. Если использовать Java Config, пожалуйста, попробуйте:

@Configuration 
@EnableElasticsearchRepositories(basePackages = "org/springframework/data/elasticsearch/repositories") 
static class Config { 

@Bean 
public ElasticsearchOperations elasticsearchTemplate() { 
    return new ElasticsearchTemplate(nodeBuilder().local(true).node().client()); 
} 
} 

Если использование XML, пожалуйста, попробуйте:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:elasticsearch="http://www.springframework.org/schema/data/elasticsearch" 
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 
http://www.springframework.org/schema/data/elasticsearch 
http://www.springframework.org/schema/data/elasticsearch/spring-elasticsearch-1.0.xsd"> 

<elasticsearch:transport-client id="client" cluster-nodes="localhost:9300,someip:9300" /> 

</beans> 

Вы можете прочитать http://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#elasticsearch.introduction

+0

Для Spring 1.4.0.RELEASE ваш метод elasticSearchTemplate должен возвращать ElasticSearchTemplate. Исходные источники ошиблись по этому вопросу. – EricGreg

4

Как сказал Джемли, вам необходимо использовать порт 9300.

Также убедитесь, что ваш клиент и сервер elastiscsearch используют ту же самую основную версию. Если вы используете elasticsearch 2.x, вам нужно будет обновить весеннюю загрузку до последней версии (> 1.4.0.RC1).

Пожалуйста, посмотрите на этот пост, если Вам необходима дополнительная информация: http://ignaciosuay.com/how-to-connect-spring-boot-to-elasticsearch-2-x-x/

+0

Спасибо, действительно помог мне. Также теперь нет необходимости вручную настраивать ElasticsearchTemplate. Следующее свойство Spring прекрасно справится с этим: spring.data.elasticsearch.cluster-nodes = localhost: 9300 – EricGreg