• elastissearch的JAVA客户端

官网  java api文档  https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/client.html

    <dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
</dependency>

目前有4种:

TransportClient、JestClient、RestClient(一种网络请求,非集群中的一员)

NodeClient(集群中一员,但不存储数据,可以查看集群的状况)

这几个都需要引入对应的Client,同时要引入Netty,因为是基于netty进行网络通信。以TransportClient为例:

    <dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>6.2.</version>
</dependency>
<dependency>
  <groupId>io.netty</groupId>
  <artifactId>netty-buffer</artifactId>
  <version>4.1.28.Final</version>
</dependency>

TransportClient 连接方式有3种,具体参见以下官网连接的例子

https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/transport-client.html

代码测试连接:

    @RequestMapping("/connTest")
public String connectEs() {
String result = "failure";
Settings settings = Settings.builder()
.put("cluster.name", "es_test")
.put("client.transport.ping_timeout", "3s")                     //default 5s
.put("client.transport.sniff", true) //嗅探会自动发现集成的其它ip,只需要设置一个master就可以通过嗅味带出其它的
.build();
TransportClient client = new PreBuiltTransportClient(settings);
try {
client.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.201.105"), ));
List<DiscoveryNode> nodeList = client.connectedNodes();
if(nodeList != null && nodeList.size() > ) {
result = "success";
}
client.close();
} catch (UnknownHostException e) {
System.out.println(e);
result = "failure";
} return result;
}

一般client被设置为单例模式。

查询:

prepareGet

GET

        GetRequestBuilder reqBuilder = transportClient.prepareGet("ik_test", "type1", "kI1COGUB9PG2P1x3QBda");
Map<String, Object> mapResult = reqBuilder.get().getSource()

UPDATE

        XContentBuilder source = XContentFactory.jsonBuilder()
.startObject()
.field("name", "8月金融数据政策寒冬")
.field("title", "中国人民银行报道")
.field("content", "社会融资坏账率明显增多")
.endObject();
UpdateResponse updateResp = transportClient.prepareUpdate("ik_test", "type1", "kI1COGUB9PG2P1x3QBda").setDoc(source).get();
Result result = updateResp.getResult();

IndexRequest :source

注意 setSource(object...) 是 传入的 key,value,key,value,key,value.....

        // key value ...
transportClient.prepareIndex("ik_test", "type1").setSource("title","BBC报道","name", "the blue planet", "content", "蓝色星球讲述海洋天空大地,以及人类环境对整个地球的影响").get();
// json
IkTestVO vo2 = new IkTestVO("VOA报道", "it's a channel to learn english", "一家做voa报道学习英文用");
transportClient.prepareIndex("ik_test", "type1").setSource(mapper.writeValueAsString(vo2), XContentType.JSON).get();
//map
Map<String, Object> vo3 = new HashMap<String, Object>();
vo3.put("title", "美国之音");
vo3.put("name", "美国之音广播电台");
vo3.put("content", "讲述美国文化生活");
transportClient.prepareIndex("ik_test", "type1").setSource(vo3).get();
//XcontentBuilder
XContentBuilder vo4 = XContentFactory.jsonBuilder()
.startObject()
.field("name", "9月金融数据政策寒冬")
.field("title", "中国证监会")
.field("content", "对于明星涉嫌非法股票套取交易的处罚规定")
.endObject();
transportClient.prepareIndex("ik_test", "type1").setSource(vo4).get();

 DELETE

transportClient.prepareDelete().setIndex("ik_test").setId("DTbzVWUBIcwRDuO5OPIA").setType("type1").get();

BULK

        BulkRequestBuilder reqBuilder = transportClient.prepareBulk();
// IndexRequest
IndexRequest indexReq = new IndexRequest("ik_test","type1");
IkTestVO vo = new IkTestVO("ABC报道", "the blue planet", "蓝色星球讲述海洋天空大地,以及人类环境对整个地球的影响");
indexReq.source(mapper.writeValueAsString(vo), XContentType.JSON); // DeleteRequest
DeleteRequest delReq = new DeleteRequest("ik_test","type1","DTbzVWUBIcwRDuO5OPIA"); // UpdateRequest
UpdateRequest updReq = new UpdateRequest("ik_test","type1", "DzYJVmUBIcwRDuO5U_If");
Map<String, Object> vo3 = new HashMap<String, Object>();
vo3.put("title", "美国之音2");
vo3.put("name", "美国之音广播电台2");
vo3.put("content", "讲述美国文化生活2");
updReq.doc(vo3); reqBuilder.add(indexReq);
reqBuilder.add(delReq);
reqBuilder.add(updReq);
BulkResponse bulkResp = reqBuilder.get();

prepareSearch

    @Test
public void testSearch() {
SearchResponse search = transportClient.prepareSearch("ik_test")
.setQuery(QueryBuilders.matchQuery("title", "美国"))
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
.setFrom()
.setSize()
.get();
SearchHits hits = search.getHits();
long count = hits.getTotalHits();
System.out.println("count: " + count);
if(count > ) {
for(SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
}
}
}

结果:

count:
{"name":"美国之音广播电台2","title":"美国之音2","content":"讲述美国文化生活2"}

 SearchType:

es的四种查询类型SearchType:

  • QUERY_AND_FETCH  (由主节点分发查询,然后再汇总查询。 仅查一次,数据量和排序问题)@deprecated
  • QUERY_THEN_FETCH(主节点分发查询,汇总分查询的id,然后再查询数据, 查两次。同样牵扯数据量和排序) 默认形式DEFAULT
  • DFS_QUERY_THEN_FETCH (解决排序和数据量,但是运行效率差)

QueryBuilders:

  参看类文件说明

elasticsearch-java的更多相关文章

  1. [搜索]ElasticSearch Java Api(一) -添加数据创建索引

    转载:http://blog.csdn.net/napoay/article/details/51707023 ElasticSearch JAVA API官网文档:https://www.elast ...

  2. Elasticsearch java api 基本搜索部分详解

    文档是结合几个博客整理出来的,内容大部分为转载内容.在使用过程中,对一些疑问点进行了整理与解析. Elasticsearch java api 基本搜索部分详解 ElasticSearch 常用的查询 ...

  3. Elasticsearch java api 常用查询方法QueryBuilder构造举例

    转载:http://m.blog.csdn.net/u012546526/article/details/74184769 Elasticsearch java api 常用查询方法QueryBuil ...

  4. Elasticsearch Java Rest Client API 整理总结 (二) —— SearchAPI

    目录 引言 Search APIs Search API Search Request 可选参数 使用 SearchSourceBuilder 构建查询条件 指定排序 高亮请求 聚合请求 建议请求 R ...

  5. Elasticsearch Java Rest Client API 整理总结 (三)——Building Queries

    目录 上篇回顾 Building Queries 匹配所有的查询 全文查询 Full Text Queries 什么是全文查询? Match 全文查询 API 列表 基于词项的查询 Term Term ...

  6. Elasticsearch Java client(ES Client 简介、Java REST Client、Java Client、Spring Data Elasticsearch)

    elasticsearch系列七:ES Java客户端-Elasticsearch Java client(ES Client 简介.Java REST Client.Java Client.Spri ...

  7. State of the official Elasticsearch Java clients

    Elasticsearch Java Clients | Elastic https://www.elastic.co/blog/state-of-the-official-elasticsearch ...

  8. 第08章 ElasticSearch Java API

    本章内容 使用客户端对象(client object)连接到本地或远程ElasticSearch集群. 逐条或批量索引文档. 更新文档内容. 使用各种ElasticSearch支持的查询方式. 处理E ...

  9. ElasticSearch Java Api-删除索引

    删除可以是删除整个索引库,也可以根据文档id删除索引库下的文档,还可以通过query查询条件删除所有符合条件的数据. 一.删除整个索引库 下面的例子会删除indexName索引: DeleteInde ...

  10. Elasticsearch Java API深入详解

    0.题记 之前Elasticsearch的应用比较多,但大多集中在关系型.非关系型数据库与Elasticsearch之间的同步.以上内容完成了Elasticsearch所需要的基础数据量的供给.但想要 ...

随机推荐

  1. get和post的解析

    get 直接获取数据 post 将数据发送到服务端缓存下来,当无法缓存数据或用户输入未知字符时用post, get:常用于数据 post:不想缓存数据,不再浏览器中缓存数据,在服务端可以,因为取数据及 ...

  2. 函数的进阶(动态参数,命名空间和作用域,函数的嵌套,gloabal和nonlocal关键字)

    1. 函数参数--动态传参 昨天已经解过了传参, 如果需要给一个函数传参,而参数又是不确定的. 或者我们给一个函数传很多参数, 我的形参就要写很多, 写起来就很麻烦, 这时我们可以考虑使用动态参数.形 ...

  3. eclipse调试的时候怎么后退?

    原文转载至:https://blog.csdn.net/qq_21262611/article/details/52121270 个人分类: myeclipse   前些天和同事交流调试技巧时,知道了 ...

  4. sqlserver 数据简单查询

    use StudentManageDB go select StudentName as 姓名,Gender as 性别,出生日期=birthday from Students where Gende ...

  5. 第二章:安装zabbix过程

    2.2 安装zabbix过程 2.2.1 安装方式选择 编译安装 (服务较多,环境复杂) yum安装(干净环境) 使用yum 需要镜像yum源 http://www.cnblogs.com/clsn/ ...

  6. linux 安装软件各种错误集锦及解决方法

    1.最小化安装了centos, 但是使用ifconfig命令时候出现”bash ifconfig command not found” .解决方法:yum -y install net-tools.x ...

  7. ZooKeeper系列(8):ZooKeeper伸缩性

    一.ZooKeeper中Observer 1.1 ZooKeeper角色 经过前面的介绍,我想大家都已经知道了在ZooKeeper集群当中有两种角色Leader和Follower.Leader可以接受 ...

  8. WordPress整站轻松开启HTTPS

    近两年来HTTPS取代HTTP已经成为大势所趋.早在2014年google Chromium安全团队提议将所有的HTTP协议网站标注为不安全.现在,Chrome浏览器已经开始执行这一标准了.从 Chr ...

  9. Visual Studio 20年

    这是一个暴露年龄的话题,如果一个程序员从第一个版本开始使用Visual Studio的话,现在应该是40多岁的中年大叔了.我的程序员生涯是从Visual basic 6.0 (vb6)开始的,一晃就过 ...

  10. leetcode 852. Peak Index in a Mountain Array

    Input: [0,1,0] Output: 1 Input: [0,2,1,0] Output: 1解: 比较数组中的i和i-1的大小,如果前一位大于后一位数字,前一位则是结果 let ans = ...