Elasticsearch中JAVA API的使用
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()方法定义了需要返回的域。
Elasticsearch中JAVA API的使用的更多相关文章
- HDFS中JAVA API的使用
HDFS中JAVA API的使用 HDFS是一个分布式文件系统,既然是文件系统,就可以对其文件进行操作,比如说新建文件.删除文件.读取文件内容等操作.下面记录一下使用JAVA API对HDFS中的 ...
- elasticsearch中的API
elasticsearch中的API es中的API按照大类分为下面几种: 文档API: 提供对文档的增删改查操作 搜索API: 提供对文档进行某个字段的查询 索引API: 提供对索引进行操作 查看A ...
- ElasticSearch实战系列三: ElasticSearch的JAVA API使用教程
前言 在上一篇中介绍了ElasticSearch实战系列二: ElasticSearch的DSL语句使用教程---图文详解,本篇文章就来讲解下 ElasticSearch 6.x官方Java API的 ...
- 使用Java操作Elasticsearch(Elasticsearch的java api使用)
1.Elasticsearch是基于Lucene开发的一个分布式全文检索框架,向Elasticsearch中存储和从Elasticsearch中查询,格式是json. 索引index,相当于数据库中的 ...
- [转]HDFS中JAVA API的使用
HDFS是一个分布式文件系统,既然是文件系统,就可以对其文件进行操作,比如说新建文件.删除文件.读取文件内容等操作.下面记录一下使用JAVA API对HDFS中的文件进行操作的过程. 对分HDFS中的 ...
- ElasticSearch AggregationBuilders java api常用聚会查询
以球员信息为例,player索引的player type包含5个字段,姓名,年龄,薪水,球队,场上位置.index的mapping为: "mappings": { "pl ...
- ElasticSearch中辅助API常用用法详解
本篇是使用Elasticsearch必不可少的必备知识,并且适用于所有的Rest Api. 返回数据格式化 当在Rest请求后面添加?pretty时,结果会以Json格式化的方式显示.另外,如果添加? ...
- ElasticSearch的java api
pom <dependencies> <dependency> <groupId>org.elasticsearch.client</groupId> ...
- elasticsearch常用JAVA API 实例
1.引入dependency <dependency> <groupId>org.springframework.data</groupId> <artifa ...
随机推荐
- 监控mysqld服务
#!/bin/bash #监控mysqld服务 #telnet 192.168.122.171 3306 | grep Connected | wc -l #远程检查 #num=`netstat -n ...
- PHP实现几种经典算法详解
前言 在编写JavaScript代码的时候存在一些对于数组的方法,可能涉及的页面会很多,然后每次去写一堆代码.长期下去代码会特别的繁多,是时候进行一波封装了,话不多说开始书写优美的代码 代码已上传gi ...
- python 基础使用list、dict、set、可变与不可变对象
参考链接:https://www.liaoxuefeng.com/wiki/1016959663602400/1017104324028448 dict是字典,可以储存键值对类型的值,set与dict ...
- 洛谷—— P1926 小书童——刷题大军
https://www.luogu.org/problem/show?pid=1926#sub 题目背景 数学是火,点亮物理的灯:物理是灯,照亮化学的路:化学是路,通向生物的坑:生物是坑,埋葬学理的人 ...
- Varnish 问题点 与 技术方案 Varnish 优劣分析
A10 有没有能做热点统计 1 Varnish 分布式 HA (目前没有HA) 2 Varnish 热点监控 (建议热点需要外部插件统计,API的话目前并木有发现,但是他自带一个伪热 ...
- Css 选择器总结
选择器 .class 类对应的元素. #id 对应的id元素. * 全部元素 div{} 对应的标签 div,p{} 全部的div和p div p{} div下全部的p标签 div>p{} di ...
- POJ1833 & POJ3187 & POJ3785 next_permutation应用
要是没有next_permutation这个函数,这些题认为还不算特别水,只是也不一定,那样可能就会有对应的模板了. 反正正是由于next_permutation这个函数.这些题包含之前的POJ122 ...
- 洛谷P2598 [ZJOI2009]狼和羊的故事
题目描述 “狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......” Orez听到这首歌,心想:狼和羊如此和谐,为什么不尝试羊狼合养呢?说干就干! Orez的羊狼圈 ...
- 实现人脸识别性别之路---open CV将图片显示出来
import cv2filename='E:\\tensorflow\\bu.jpg'#图片的地址 # face_cascade=cv2.CascadeClassifier('C:\\anconda3 ...
- IDEA集成Python插件,SDK配置
(第一次写在博客园添加随笔, 会有些生硬,有不对的地方和描述错误之处希望可以指出) 最近在学习一个新的知识点,涉及到Python的使用,因为第一次接触很多地方都不是很明白 ,好,废话不多说,现在直接上 ...