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所需要的基础数据量的供给.但想要 ...
随机推荐
- [转][CentOS]修改IP后立即生效
来自:http://bbs.51cto.com/thread-789908-1.html Linux系统里修改IP地址后该如何使之即刻生效,有两种方法可以解决: (1) sudo ifdown eth ...
- 判断浏览器是否IE(IE11可用)
function isIE() { //ie? if (!!window.ActiveXObject || "ActiveXObject" in window) { ...
- openstack添加热添加硬盘并识别
假定在虚拟机当中添加了磁盘,但是虚拟机没有识别出来:如何识别出来 可以使用命令 echo '- - -' >/sys/class/scsi_host/host0/scan 使用后就可以识别出来了 ...
- redis-5.0.3集群搭建
首先部署redis-5.0.3,请参考我的另一篇文章 https://www.cnblogs.com/djlsunshine/p/10592174.html 启动redis服务 # redis-ser ...
- [UE4]键盘鼠标输入事件
然后在角色的事件视图就可以使用预先定义好的事件
- javaScript read blob
http://www.cnblogs.com/wangfajing/p/7202139.html?utm_source=itdadao&utm_medium=referral
- HBase常用操作命令
HBase常用操作命令 1.进入HBase脚本客户端 #hbase shell #进入HBase脚本客户端 > whoami #查看当前登录用户 > status ...
- 使用LVS实现负载均衡原理及安装配置详解(转)
负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群.常用的负载均衡开源软件有nginx.lvs.haproxy,商业的硬件负载均衡设备F5.Netscale.这里主要是学 ...
- PHP:引用PhpExcel导出数据到excel表格
我使用的是tp3.2框架(下载地址:http://www.thinkphp.cn/topic/38123.html) 1.首先要下载PhpExcel类库,放在如下图目录下 2.调用方法 public ...
- CF1139D Steps to One (莫比乌斯反演 期望dp)
\[ f[1] = 0 \] \[ f[i] = 1 + \frac{1}{m} \sum_{j = 1} ^ n f[gcd(i, j)] \ \ \ \ \ \ (i != 1) \] 然后发现后 ...