2014-08-27 11 views
8

Gram z projektem spring-boot-sample-data-elastcisearch. Zmieniłem POM i dodał:Jak sprawić, by funkcja elasticsearch była dostępna za pośrednictwem localhost: 9200

SampleElasticsearchApplicationWebXml extends SpringBootServletInitializer 

uruchomić z Tomcat osadzone. Moi application.properties ma

spring.data.elasticsearch.http-enabled=true 
spring.data.elasticsearch.local=true 

Chcę być w stanie połączyć się z localhost: 9200 w celu wykorzystania elasticsearch-head lub inny klient JS. czego mi brakuje? Dzięki Mediolan

+0

Można spróbować czytanie dokumentacji dla klienta wiosna elasticsearch. Wygląda na to, że wspierają różne sposoby łączenia się z elastycznym wyszukiwaniem. Wątpię, by ustawienie właściwości elastycznego wyszukiwania sprawiło, że magicznie zrobi to, co chcesz. Jeśli chcesz uruchomić wbudowaną funkcję elasticsearch, prawdopodobnie musisz to zrobić samodzielnie. W tym celu przeczytaj dokumentację elasticsearch. W rzeczywistości obsługują one uruchamianie węzła klienta osadzonego, ale wątpię, aby uruchomiono transport http, ponieważ nie jest on potrzebny. Będziesz nadal potrzebował odpowiedniego węzła elastycznego przeszukiwania, z którym mógłby się połączyć. –

Odpowiedz

7

należy zdefiniować to dla siebie, ponieważ NodeClientFactoryBean posiada opcję http.enabled ale ElasticSearchAutoConfiguration nie jest (jeszcze) ustawić go.

@Configuration 
@EnableConfigurationProperties(ElasticsearchProperties.class) 
public class ElasticsearchConfiguration implements DisposableBean { 

    private static Log logger = LogFactory.getLog(ElasticsearchConfiguration.class); 

    @Autowired 
    private ElasticsearchProperties properties; 

    private NodeClient client; 

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

    @Bean 
    public Client esClient() { 
     try { 
      if (logger.isInfoEnabled()) { 
       logger.info("Starting Elasticsearch client"); 
      } 
      NodeBuilder nodeBuilder = new NodeBuilder(); 
      nodeBuilder 
        .clusterName(this.properties.getClusterName()) 
        .local(false) 
      ; 
      nodeBuilder.settings() 
        .put("http.enabled", true) 
      ; 
      this.client = (NodeClient)nodeBuilder.node().client(); 
      return this.client; 
     } 
     catch (Exception ex) { 
      throw new IllegalStateException(ex); 
     } 
    } 

    @Override 
    public void destroy() throws Exception { 
     if (this.client != null) { 
      try { 
       if (logger.isInfoEnabled()) { 
        logger.info("Closing Elasticsearch client"); 
       } 
       if (this.client != null) { 
        this.client.close(); 
       } 
      } 
      catch (final Exception ex) { 
       if (logger.isErrorEnabled()) { 
        logger.error("Error closing Elasticsearch client: ", ex); 
       } 
      } 
     } 
    } 
} 
+0

Dzięki, skończyłem przepisywanie ElasticSearchAutoConfiguration z wiosennego rozruchu i to działa. –

+0

Nie zapomnij wyłączyć konfiguracji ElasticsearchAutoConfiguration '@EnableAutoConfiguration (exclude = {ElasticsearchAutoConfiguration.class}) w twojej klasie początkowej (klasa z metodą' main'). W przeciwnym razie boot uruchomi dwa węzły! – einsA

15

Według this ticket można teraz po prostu dodać ten wiersz do plików konfiguracyjnych:

spring.data.elasticsearch.properties.http.enabled=true