[英]Can I search by multiple fields using the Elastic Search Java API?
[英]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
。 以下是實現這一目標的方法之一。
如果我有兩個不同的主機/環境,例如dev
和prod
,我最終會創建三個應用程序屬性文件(兩個用於環境,一個屬性可以提及您想要選擇的環境)。
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.