为了研究elasticsearch的源码,可以从github下载源码,到本地编译,但这种方法比较麻烦。
我是采用eclipse构建maven项目,在pom文件中引用elasticsearch的jar包的方式来搭建源码阅读的环境。
搭建
因为我搭建的es集群是2.2.1版本(关于如何搭建集群,可以参考ElasticSearch 分布式安装及调优 ,所以选用的elasticsearch也是2.2.1版本,maven依赖如下:
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>2.2.1</version>
</dependency>
如果集群版本不一样,也可以到maven仓库选择其他版本。
创建客户端
为了跟集群通信,首先需要创建客户端,在这里,我使用了TransportCllient,参照官方文档,我对其进行了封装,方便后续使用,具体代码如下:
package es;
import java.net.InetAddress;
import java.net.UnknownHostException;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
public class MyTransportClient {
private TransportClient transportClient;
private static MyTransportClient clientInstance;
private MyTransportClient() {
/**
* 设置
*/
Settings settings = Settings.settingsBuilder()
.put("cluster.name","qiaqia")//我的集群名
.put("client.transport.sniff",true)
.build();
try {
transportClient = TransportClient.builder().settings(settings).build()
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.0.4"), ));
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
/*
* 单例
*/
public static MyTransportClient getInstance(){
if(clientInstance==null){
clientInstance = new MyTransportClient();
}
return clientInstance;
}
public TransportClient getTransportClient() {
return transportClient;
}
}
在集群中索引一条数据
命令行执行:
curl -XPUT 'http://192.168.0.4:9200/library/book/1?pretty' -d '
{ "title":"mastering elasticsearch"}'
得到
{
"_index" : "library",
"_type" : "book",
"_id" : "1",
"_version" : ,
"_shards" : {
"total" : ,
"successful" : ,
"failed" :
},
"created" : true
}
通过客户端获取es中的索引数据
package es;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.client.transport.TransportClient;
public class MyClientTest {
public static void main(String[] args) {
TransportClient client = MyTransportClient.getInstance().getTransportClient();
//get document
GetResponse response = client.prepareGet("library","book","1").get();
System.out.println(response.getSourceAsString());
}
}
测试
执行MyClientTest,console输出以下信息:
四月 , :: 下午 org.elasticsearch.plugins.PluginsService <init>
信息: [Termagaira] modules [], plugins [], sites []
{"title":"mastering elasticsearch"}
表明客户端连接成功并且能正确获取es集群的数据。
在eclipse 的
maven Dependences
里面,可以查看相关的类的源码。