• 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. 学习笔记之Data analysis

    Data analysis - Wikipedia https://en.wikipedia.org/wiki/Data_analysis Data analysis is a process of ...

  2. C++ Programming Language中的Calculator源代码

    C++ Programming Language 4th中的Calculator源代码整理,因为在C++ Programming Language中,涉及了很多文件位置之类的变化,所以,这里只是其中的 ...

  3. centos6.8下pptp客户端的安装配置

    原文: https://blog.csdn.net/zhang11321132/article/details/20612473 yum -y install ppp pptp pptp-setup ...

  4. python模块: hashlib模块, configparse模块, logging模块,collections模块

    一. hashlib模块 Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用 ...

  5. [UE4]Visiblity、Render Opacity

    Visiblity 1.Visible 默认是visible,可见,并且可响应事件(如点击事件) 2.Collapsed 不可见.不响应事件.不占用容器空间 3.Hidden 不可见,不响应事件,但占 ...

  6. [UE4]更新UI的三种方式

    一.函数绑定 二.属性绑定 只会列出匹配的数据类型. 三.事件驱动更新 啦啦啦啦啦 结论:函数和属性绑定的原理都是每帧都去调用绑定的函数/属性,效率比较低下,一般不推荐使用.事件驱动更新的效率最好,性 ...

  7. RabbitMQ manage

    1. RabbitMQ service sudo systemctl enable rabbitmq-server sudo systemctl start rabbitmq-server sudo ...

  8. 用singleton单例模式实现一个模块

    对于具有唯一性的模块(例如,购物车项目中的物品数据,各个页面都要使用它,而且是唯一的数据),用singleton模式. var mySingleton = (function() { var priv ...

  9. Getting Physical With Memory.CPU如何操作内存

    原文标题:Getting Physical With Memory 原文地址:http://duartes.org/gustavo/blog/ [注:本人水平有限,只好挑一些国外高手的精彩文章翻译一下 ...

  10. LOJ6268拆分数

    /* 相当于每种物品都有无限个的背包 毕竟考场上写exp是个比较危险的行为 对数据进行根号分治是个比较好的方法 对于小于等于根号的部分暴力背包转移 对于大于根号的 最多只会拿根号个 dp一下就好了 * ...