簡體   English   中英

我可以在Spring Bean配置中為多個彈性搜索索引使用多個彈性搜索主機

[英]Can I use multiple elastic search hosts in Spring Bean configuration for multiple elastic search indexes

我有一個Java API來將文檔插入三個彈性索引,它正在工作。 我想在API中更改一個索引的主機。 通常,EsConfig文件和ElasticSearchTemplate代碼是;

public class EsConfig {
    @Value("${elasticsearch.host}")
    private String EsHost;
   @Value("${elasticsearch.port}")
   private int EsPort;
   @Value("${elasticsearch.clustername}")
   private String EsClusterName;

   @Bean
   public Client client() throws Exception {
      Settings settings = Settings.builder()
            .put("cluster.name", EsClusterName)
            //.put("index.max_result_window", 4000000)
            .build();

      TransportClient client = new PreBuiltTransportClient(settings)
            .addTransportAddress(new 
      TransportAddress(InetAddress.getByName(EsHost), EsPort));
      return client;
     }

     @Bean
     public ElasticsearchTemplate elasticsearchTemplate() throws Exception {
          ElasticsearchTemplate elasticsearchTemplate = new ElasticsearchTemplate(client());
          return elasticsearchTemplate;
      }

}

我想配置此結構以一起使用兩個主機。 是否有可能在這個結構中或我應該完全改變和刪除單個bean結構?

Elasticsearch客戶端api允許您以下面的方式配置多個主機名,但不幸的是,它們無法按預期工作。

根據這個LINK

TransportClient使用傳輸模塊遠程連接到Elasticsearch集群。 它不加入集群,而只是獲取一個或多個初始傳輸地址,並在每個操作上以循環方式與它們通信(盡管大多數操作可能是“兩跳”操作)。

TransportClient client = new PreBuiltTransportClient(Settings.EMPTY)
        .addTransportAddress(new TransportAddress(InetAddress.getByName("host1"), 9300))
        .addTransportAddress(new TransportAddress(InetAddress.getByName("host2"), 9300));

您可以做的可能是繼續實現Profiles的Spring Boot概念,您可以在其中創建多個application.properties 以下是實現這一目標的方法之一。

如果我有兩個不同的主機/環境,例如devprod ,我最終會創建三個應用程序屬性文件(兩個用於環境,一個屬性可以提及您想要選擇的環境)。

application-dev.properties

elasticsearch.clustername = mycluster_name
elasticsearch.host = mydev.abc.com          <-- Configure the name of host 1
elasticsearch.port = 9300

application-prod.properties

elasticsearch.clustername = mycluster_name_2
elasticsearch.host = myprod.abc.com         <-- Configure the name of host 2
elasticsearch.port = 9300

application.properties

spring.profiles.active=dev                 <-- Configure which of the above properties do you want to start application with

現在,當您將應用程序作為spring boot運行時,它將最終啟動dev環境。

請注意,我假設這兩個節點都在不同的集群中,而不是同一集群的一部分。 我指定這個的原因是因為,如果接收到新的/更新的文檔,elasticsearch將在內部繼續並更新其他節點的副本分片。 在同一個集群中,您指向的集群中的哪個主機無關緊要。

如果這是您正在尋找的,請告訴我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM