1.Elasticsearch中Java API的简介

  Elasticsearch 的Java API 提供了非常便捷的方法来索引和查询数据等。 通过添加jar包,不需要编写HTTP层的代码就可以开始着手进行连接到Elasticsearch的工作。它提供了两种方法连接到Elasticsearch:创建一个本地节点并加入集群(cluster),或者利用传输(transport)。这两种方法都是利用一个Client(org.elasticsearch.client.Client)实例来实现的。

2.两种连接方法的说明和比较

  使用第一种方法的思想,是讲创建的本地节点作为集群的一部分,这样这个创建的本地节点就可以是知道整个集群的情况,比如relevant shard是如何分配的已经如何进行高效的查询。

Node node = nodeBuilder().clusterName("escluster2").client(true).node();
Client client = node.client();

  使用NodeBuilder来创建一个node,使用clusterName()方法来指定我们想要连接的集群。为了避免本地节点关机后集群将shard移动到本地节点,从而造成数据丢失的情况,我们需要client(true);

  第二种方法:通过ImmutableSettings我们设置了希望连接的集群的名称,接下来创建了一个TransportClient,通过建立InetSocketTransportAddress实例来提供Elasticsearch server所在的IP地址已经传输层的监听端口(JAVA API 默认9300,并非REST API的9200 )。

Settings settings = ImmutableSettings.settingsBuilder()
.put("cluster.name", "escluster2").build();
TransportClient client = new TransportClient(settings);
client.addTransportAddress(new InetSocketTransportAddress("127.0.0.1",
9300));

  关于两种方法的选择,第一种方法:建立本地节点会需要一些时间,但是在执行一些操作的事情会节省很多时间,因为本地阶段知道整个集群中indice和shard情况。 第二种方法:建立TransportClient是比较高效的,但是发送查询信息以及数据就需要更多的资源,因为TransportClient不清楚整个集群的拓扑,所以她不能直接将数据发送到目的节点,而是发送至一个初始化后的transport节点,ElasticSearch完成接下来的转发。  注意::如果需要连接到不用网络中的Elasticsearch集群,就必须使用第二种方法(TransportClient对象)。

3.Client的查询设置

  Client是与集群进行通信的关键,而prepareXXX等函数返回一个Binder(org.elasticsearch.action.get.GetRequestBuilder)对象来方便我们设置参数。设置之后我们可以使用request()方法来保存这个request以便将来使用,或者使用execute()方法来立即执行一次查询。
  由于Elasticsearch是天生异步的,执行execute后会在等到查询结果之前就返回caller block,所以我们可以简单的使用actionGet()方法来阻塞程序直到查询结构返回。

GetResponse response = client
.prepareGet("library", "book", "1")
.setFields("title", "_source")
.execute().actionGet();

4.query举例

public class ElasticSearchClient    {
private static Client client = null;
private static Properties elasticsearch_properties = new Properties();
private static String PATH = ElasticSearchClient.class.getClassLoader().getResource("elasticsearch.properties").getPath();
private static String HOST = "elasticsearch.host";
private static String PORT = "elasticsearch.port"; public static void main(String[] args) {
ElasticSearchClient client = new ElasticSearchClient();
client.init();
client.query();
client.close();
} public void init() {
client = new TransportClient()
.addTransportAddress(new InetSocketTransportAddress("YOURHOSTNAME",9300));
System.out.println("TransportClient: " + client.toString());
} public void query() {
//匹配所有
//QueryBuilder queryBuilder = QueryBuilders.matchAllQuery(); //设置查询条件
QueryBuilder queryBuilder = QueryBuilders.disMaxQuery()
.add(QueryBuilders.termQuery("cmd-statistic", "http.avg5"));
.add(QueryBuilders.prefixQuery("info-type", "statistic")); //System.out.println(queryBuilder.toString()); SearchResponse response = client.prepareSearch("INDEXNAME")
.setQuery(queryBuilder).execute().actionGet(); for (SearchHit hit : response.getHits().getHits()) {
System.out.println("---->>hit.getId(): " + hit.getId());
if (hit.getFields().containsKey("cmd-statistic")) { System.out.println("field.cmd-statistic: "
+ hit.getFields().get("cmd-statistic").getValue());
}
System.out.println("cmd-statistic: " + hit.getSource().get("cmd-statistic"));
}
} public void close()
{
try {
client.close();
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
client.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
}

  SearchHit类代表了一个满足查询条件的document,获得SearchHit后可以通过便利来输出每一个hit的信息。addFiled()方法定义了需要返回的域。

 
 

    

最新文章

  1. iOS开发——高级篇——音频、音乐播放(封装类)
  2. 我的Android最佳实践之—— Android更新UI的两种方法:handler与runOnUiThread()
  3. C# 验证IP是否正确简易方法 源代码
  4. Django学习笔记——安装(linux环境)
  5. 解决mac os x 10.9.1 AppStore ‘Use the Purchases page to try again’ 问题
  6. HDU 4722 Good Numbers 2013年四川省赛题
  7. ownCloud Virtual Machines(bitnami.com)
  8. Carmack在QUAKE3中使用的计算平方根的函数
  9. android UI跨线程操作
  10. Research notes for Scientific Writing
  11. 解决由于VNC日志导致服务器磁盘100%
  12. iscroll4 input textarea不能获得焦点问题
  13. hdu 2048 递推&&错排
  14. 【django之分页器】
  15. SQL-55 分页查询employees表,每5行一页,返回第2页的数据
  16. spring-boot(六) 邮件服务
  17. bzoj1597/luogu2900 土地购买 (斜率优化dp)
  18. window.scroll原生滚动
  19. WebService的几种验证方式
  20. JFinal上传文件时用getFile()方法报错

热门文章

  1. ActiveMQ学习总结(8)——消息队列设计精要
  2. (iOS)确保设置话筒模式成功 AudioSessionSetProperty
  3. 如何下载最新版的 Adobe Flash Player
  4. SpringMVC中JSP取不到ModelAndView的数据原因
  5. java静态类、静态方法、静态代码块,静态变量及实例方法,实例变量初始化顺序及内存管理,机制
  6. 快速架设OpenStack云基础平台
  7. 使用java自带的xml解析器解析xml
  8. 最长回文子串 hihocode 1032 hdu 3068
  9. Json与JsonPath
  10. SPI总线工作模式