elasticsearch-java
- 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的更多相关文章
- [搜索]ElasticSearch Java Api(一) -添加数据创建索引
转载:http://blog.csdn.net/napoay/article/details/51707023 ElasticSearch JAVA API官网文档:https://www.elast ...
- Elasticsearch java api 基本搜索部分详解
文档是结合几个博客整理出来的,内容大部分为转载内容.在使用过程中,对一些疑问点进行了整理与解析. Elasticsearch java api 基本搜索部分详解 ElasticSearch 常用的查询 ...
- Elasticsearch java api 常用查询方法QueryBuilder构造举例
转载:http://m.blog.csdn.net/u012546526/article/details/74184769 Elasticsearch java api 常用查询方法QueryBuil ...
- Elasticsearch Java Rest Client API 整理总结 (二) —— SearchAPI
目录 引言 Search APIs Search API Search Request 可选参数 使用 SearchSourceBuilder 构建查询条件 指定排序 高亮请求 聚合请求 建议请求 R ...
- Elasticsearch Java Rest Client API 整理总结 (三)——Building Queries
目录 上篇回顾 Building Queries 匹配所有的查询 全文查询 Full Text Queries 什么是全文查询? Match 全文查询 API 列表 基于词项的查询 Term Term ...
- 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 ...
- State of the official Elasticsearch Java clients
Elasticsearch Java Clients | Elastic https://www.elastic.co/blog/state-of-the-official-elasticsearch ...
- 第08章 ElasticSearch Java API
本章内容 使用客户端对象(client object)连接到本地或远程ElasticSearch集群. 逐条或批量索引文档. 更新文档内容. 使用各种ElasticSearch支持的查询方式. 处理E ...
- ElasticSearch Java Api-删除索引
删除可以是删除整个索引库,也可以根据文档id删除索引库下的文档,还可以通过query查询条件删除所有符合条件的数据. 一.删除整个索引库 下面的例子会删除indexName索引: DeleteInde ...
- Elasticsearch Java API深入详解
0.题记 之前Elasticsearch的应用比较多,但大多集中在关系型.非关系型数据库与Elasticsearch之间的同步.以上内容完成了Elasticsearch所需要的基础数据量的供给.但想要 ...
随机推荐
- 学习笔记之Microsoft Office 365
云办公确实很方便. Office 365 登录 | Microsoft Office https://www.office.com/ Office 365 - Wikipedia https://en ...
- MATLAB在三维坐标中显示图片 并 使得图片部分透明
要画一个光路图,本来可以用proe,但是鼠标不好用,有些操作也忘了,用MATLAB画了个.下面是用到的图片. 但是三维坐标中显示彩色图片的目标没有搞定,做了个灰度图,然后用仿射程序将彩色图片贴到了二维 ...
- Zabbix 课程大纲
Zabbix 课程笔记 day1 Zabbix 安装 day1 Zabbix 添加主机 day1 Zabbix 创建监控项目 day1 Zabbix 创建触发器 day1 Zabbix 告警内容配 ...
- 漫谈数据仓库之拉链表(原理、设计以及在Hive中的实现)
本文将会谈一谈在数据仓库中拉链表相关的内容,包括它的原理.设计.以及在我们大数据场景下的实现方式. 全文由下面几个部分组成: 先分享一下拉链表的用途.什么是拉链表. 通过一些小的使用场景来对拉链表做近 ...
- [UE4]更新Flag坐标
UserWidget中也是有Event Tick事件,游戏运行每一帧都会调用这个事件 一.在MiniMapFlagData结构体中,添加Slot和ImageWidget变量 二.在StaticMini ...
- [UE4]图片按钮设置技巧
- http、TCP/IP协议与socket之间的区别(转载)
http.TCP/IP协议与socket之间的区别 https://www.cnblogs.com/iOS-mt/p/4264675.html http.TCP/IP协议与socket之间的区别 ...
- ubuntu18.04 LTS解决/boot空间不足
1. 查看磁盘占用情况 df -h Filesystem Size Used Avail Use% Mounted on/dev/nvme0n1p5 181M 141M 27M ...
- MapReduce源码刨析
MapReduce编程刨析: Map map函数是对一些独立元素组成的概念列表(如单词计数中每行数据形成的列表)的每一个元素进行指定的操作(如把每行数据拆分成不同单词,并把每个单词计数为1),用户可以 ...
- 数据库数据以Excel的方式导出
import java.io.Serializable; import java.util.List; import com.cfets.cwap.s.util.db.TableColumn; /** ...