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的使用的更多相关文章

  1. HDFS中JAVA API的使用

    HDFS中JAVA API的使用   HDFS是一个分布式文件系统,既然是文件系统,就可以对其文件进行操作,比如说新建文件.删除文件.读取文件内容等操作.下面记录一下使用JAVA API对HDFS中的 ...

  2. elasticsearch中的API

    elasticsearch中的API es中的API按照大类分为下面几种: 文档API: 提供对文档的增删改查操作 搜索API: 提供对文档进行某个字段的查询 索引API: 提供对索引进行操作 查看A ...

  3. ElasticSearch实战系列三: ElasticSearch的JAVA API使用教程

    前言 在上一篇中介绍了ElasticSearch实战系列二: ElasticSearch的DSL语句使用教程---图文详解,本篇文章就来讲解下 ElasticSearch 6.x官方Java API的 ...

  4. 使用Java操作Elasticsearch(Elasticsearch的java api使用)

    1.Elasticsearch是基于Lucene开发的一个分布式全文检索框架,向Elasticsearch中存储和从Elasticsearch中查询,格式是json. 索引index,相当于数据库中的 ...

  5. [转]HDFS中JAVA API的使用

    HDFS是一个分布式文件系统,既然是文件系统,就可以对其文件进行操作,比如说新建文件.删除文件.读取文件内容等操作.下面记录一下使用JAVA API对HDFS中的文件进行操作的过程. 对分HDFS中的 ...

  6. ElasticSearch AggregationBuilders java api常用聚会查询

    以球员信息为例,player索引的player type包含5个字段,姓名,年龄,薪水,球队,场上位置.index的mapping为: "mappings": { "pl ...

  7. ElasticSearch中辅助API常用用法详解

    本篇是使用Elasticsearch必不可少的必备知识,并且适用于所有的Rest Api. 返回数据格式化 当在Rest请求后面添加?pretty时,结果会以Json格式化的方式显示.另外,如果添加? ...

  8. ElasticSearch的java api

    pom <dependencies> <dependency> <groupId>org.elasticsearch.client</groupId> ...

  9. elasticsearch常用JAVA API 实例

    1.引入dependency <dependency> <groupId>org.springframework.data</groupId> <artifa ...

随机推荐

  1. 【SRM 716 DIV 1 A】 ConstructLCS

    Problem Statement A string S is a subsequence of a string T if we can obtain S from T by erasing som ...

  2. vdceye 最新中文界面

    最新的vdceye 的界面.左边菜单增加了问题.并增加了虚拟摄像机部分 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdmlkZW9fZGM=/font/5 ...

  3. JavaWeb与JSP初识

    JavaWeb执行过程 目录结构 Web程序部署在Tomcat的/webapps下面. 一个webapps文件夹可以部署多个不同的Web应用,webapps/web1,webapps/web2. 如果 ...

  4. 11.ng-init

    转自:https://www.cnblogs.com/best/tag/Angular/ 初始化 <p ng-init="test=1" ng-repeat="a ...

  5. 7. java操作MongoDB,采用_id查询

    转自:https://www.2cto.com/database/201704/633262.html mongodb命令行_id查询方法 直接用ObjectId() db.getCollection ...

  6. Python(十二) Pythonic与Python杂记

    一.导言 二.用字典映射代替switch case语句   # 字典代替 switch 语句 # switch () # { # case 0 : # dayName= 'a'; # break; # ...

  7. 【Django】模板系统

    目录 一.变量 二.过滤器 Filters 2. length 3. filesizeformat 4. slice 5. add 6. first.last 7. join 8. truncatec ...

  8. JAVA文件读取FileReader

    JAVA文件读取FileReader 导包import java.io.FileReader 创建构造方法public FileReader(String filename),参数是文件的路径及文件名 ...

  9. HttpClient方式调用接口的java 简单案例源码+附jar包

    1 package com.itNoob.httpClient; import org.apache.commons.httpclient.HttpClient; import org.apache. ...

  10. Vim插件使用技巧(转)

    在 IDEA Intellij小技巧和插件 一文中简单介绍了一下IdeaVim插件.在这里详细总结一下这个插件在日常编程中的一些常用小技巧.供有兴趣使用这个插件,但对Vim还不十分熟悉的朋友参考.当然 ...