1

Ich habe eine Spring Boot-Anwendung, und ich möchte Elastic Search 2.2.0 Standalone (nicht den eingebetteten Server) verwenden, ich möchte Spring Data Elastic suchen, was sind die Elastic search unterstützte Versionen von Spring Data und wie kann ich es konfigurieren, um eine Verbindung zu elasticsearch-Instanz herzustellen, die in localhost: 9200 läuft?Spring Data Elastic Suche in einem Spring Boot-Anwendung

Eigentlich habe ich versucht, diese Optionen zu meiner application.properties Datei hinzufügen:

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

Und später, habe ich diese Konfiguration Klasse:

@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; 
    } 
} 

Ich erhalte diese Stacktrace:

2016-04-28 00: 03: 52.246 INFO 25613 --- [neugestartet] org.elasticsearch.plugins: [Aardwolf ] loaded [], sites [] 2016-04-28 00: 04: 01.356 INFO 25613 --- [neugestartet] org.elasticsearch.client.transport: [Aardwolf] konnte nicht knoten info für [#transport # -1] [fathi-HP-Pavilion-g6-Notebook-PC] [inet [localhost/127.0.0.1: 9200]], Trennen ...

org.elasticsearch.transport.ReceiveTimeoutTransportException: [] [ inet [localhost/127.0.0.1: 9200]] [cluster: monitor/nodes/info] request_id [0] Zeitüberschreitung nach [5001ms] um org.elasticsearch.transport.TransportService $ TimeoutHandler.run (TransportService.java:529) ~ [elasticsearch-1.5.2.jar: na] um java.util.concurrent.ThreadPoolExecutor.ru nWorker (ThreadPoolExecutor.java:1142) ~ [na: 1.8.0_77] bei java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:617) ~ [na: 1.8.0_77] bei java.lang .Thread.run (Thread.java:745) ~ [Na: 1.8.0_77]

2016.04.28 00: 04: 01,512 ERROR 25613 --- [restartedMain] .dersAbstractElasticsearchRepository: nicht geladen Elasticsearch Knoten: org.elasticsearch.client.transport.NoNodeAvailableException: Keine von die konfigurierten Knoten zur Verfügung: []

+0

Es ist nur ein Client. Bitte überprüfen Sie Ihren ElasticSearch Server Status. –

+0

@Gemini Keith: Elasticsearch ist und läuft: http: // localhost: 9200/{ "name": "Hildegarde", "cluster": "Elasticsearch", "Version": { "number": " 2.2.0" "build_hash": "8ff36d139e16f8720f2947ef62c8167a888992fe" "build_timestamp": "2016-01-27T13: 32: 39Z" "build_snapshot": false, "lucene_version": "5.4.1" } , "tagline": "Sie wissen, für die Suche" } – jemlifathi

+0

Siehe diese Antwort: http://stackoverflow.com/a/36858819/4604579. Spring Data ist noch nicht bereit für ES 2.x – Val

Antwort

4

Ich habe diese Antwort aus dem Forum ES und es funktionierte für me:

Zuerst arbeitet Spring Data Elasticsearch offiziell mit ES 1.x Versionen (für mich funktionierte es mit 1.7.1). Zweitens muss der Port in der Konfiguration verwendet werden 9300

Ich machte diese Änderungen und es funktionierte ziemlich perfekt.

1

Ich lese das offizielle Dokument. Wenn Java Config verwenden, bitte versuchen Sie es:

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

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

Wenn die Verwendung von XML, bitte versuchen Sie es:

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

Sie http://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#elasticsearch.introduction lesen

+0

Für Spring 1.4.0.RELEASE sollte Ihre elasticSearchTemplate-Methode ElasticSearchTemplate zurückgeben. Ursprüngliche Quellen waren in diesem Punkt falsch. – EricGreg

4

Wie Jemli sagte, müssen Sie den Port 9300 verwenden.

Stellen Sie außerdem sicher, dass Ihr elatiscsearch Client und Server dieselbe Hauptversion verwenden. Wenn Sie elasticsearch 2.x verwenden, müssen Sie den Spring-Boot auf die neueste Version aktualisieren (> 1.4.0.RC1).

Bitte schauen Sie auf dieses Thema, wenn Sie mehr Informationen benötigen: http://ignaciosuay.com/how-to-connect-spring-boot-to-elasticsearch-2-x-x/

+0

Danke, hat mir wirklich geholfen. Auch jetzt ist es nicht notwendig, ElasticsearchTemplate manuell zu konfigurieren. Die folgende Spring-Eigenschaft wird es gut handhaben: spring.data.elasticsearch.cluster-nodes = localhost: 9300 – EricGreg