這是關(guān)于elasticsearch Java api的第一篇教程,陸續(xù)會(huì)把es的一些心得寫出來。
可以通過兩種方式來連接到elasticsearch(簡(jiǎn)稱es)集群,第一種是通過在你的程序中創(chuàng)建一個(gè)嵌入es節(jié)點(diǎn)(Node),使之成為es集群的一部分,然后通過這個(gè)節(jié)點(diǎn)來與es集群通信。第二種方式是用TransportClient這個(gè)接口和es集群通信。
Node方式
創(chuàng)建嵌入節(jié)點(diǎn)的方式如下:
- import static org.elasticsearch.node.NodeBuilder.*;
- //啟動(dòng)節(jié)點(diǎn)
- Node node = nodeBuilder().node();
- Client client = node.client();
- //關(guān)閉節(jié)點(diǎn)
- node.close();
- import static org.elasticsearch.node.NodeBuilder.*;
- //啟動(dòng)節(jié)點(diǎn)
- Node node = nodeBuilder().node();
- Client client = node.client();
- //關(guān)閉節(jié)點(diǎn)
- node.close();
當(dāng)你啟動(dòng)一個(gè)節(jié)點(diǎn),它會(huì)自動(dòng)加入同網(wǎng)段的es集群,一個(gè)前提就是es的集群名(cluster.name)這個(gè)參數(shù)要設(shè)置一致。
默認(rèn)的話啟動(dòng)一個(gè)節(jié)點(diǎn),es集群會(huì)自動(dòng)給它分配一些索引的分片,如果你想這個(gè)節(jié)點(diǎn)僅僅作為一個(gè)客戶端而不去保存數(shù)據(jù),你就可以設(shè)置把node.data設(shè)置成false或 node.client設(shè)置成true。下面是例子:
- Node node = nodeBuilder().clusterName(clusterName).client(true).node();
- Node node = nodeBuilder().clusterName(clusterName).client(true).node();
還有一種情況是你并不想把節(jié)點(diǎn)加入集群,只想用它進(jìn)行單元測(cè)試時(shí),就要啟動(dòng)一個(gè)“本地”的es,這里“本地”指的是在jvm的級(jí)別下運(yùn)行,即兩個(gè)不同的es節(jié)點(diǎn)運(yùn)行在同一個(gè)JVM中時(shí)會(huì)組成一個(gè)集群。它需要把節(jié)點(diǎn)的local參數(shù)設(shè)置成true,下面是例子:
- Node node = nodeBuilder().local(true).node();
- Node node = nodeBuilder().local(true).node();
TransportClient方式
通過TransportClient這個(gè)接口,我們可以不啟動(dòng)節(jié)點(diǎn)就可以和es集群進(jìn)行通信,它需要指定es集群中其中一臺(tái)或多臺(tái)機(jī)的ip地址和端口,例子如下:
- Client client = new TransportClient()
- .addTransportAddress(new InetSocketTransportAddress("host1",9300))
- .addTransportAddress(new InetSocketTransportAddress("host2",9300));
-
- client.close();
- Client client = new TransportClient()
- .addTransportAddress(new InetSocketTransportAddress("host1", 9300))
- .addTransportAddress(new InetSocketTransportAddress("host2", 9300));
-
- client.close();
如果你需要更改集群名(默認(rèn)是elasticsearch),需要如下設(shè)置:
- Settings settings = ImmutableSettings.settingsBuilder()
- .put("cluster.name", "myClusterName").build();
- Client client = new TransportClient(settings);
- Settings settings = ImmutableSettings.settingsBuilder()
- .put("cluster.name", "myClusterName").build();
- Client client = new TransportClient(settings);
你可以設(shè)置client.transport.sniff為true來使客戶端去嗅探整個(gè)集群的狀態(tài),把集群中其它機(jī)器的ip地址加到客戶端中,這樣做的好處是一般你不用手動(dòng)設(shè)置集群里所有集群的ip到連接客戶端,它會(huì)自動(dòng)幫你添加,并且自動(dòng)發(fā)現(xiàn)新加入集群的機(jī)器。代碼實(shí)例如下:
- Settings settings = ImmutableSettings.settingsBuilder()
- .put("client.transport.sniff",true).build();
- TransportClient client = new TransportClient(settings);
- Settings settings = ImmutableSettings.settingsBuilder()
- .put("client.transport.sniff", true).build();
- TransportClient client = new TransportClient(settings);
參考資料:http://www.searchtech.pro/articles/2013/02/18/1361194853254.html
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。