在上一篇中介绍了ElasticSearch实战系列二: ElasticSearch的DSL语句使用教程---图文详解,本篇文章就来讲解下 ElasticSearch 6.x官方Java API的使用。
目前市面上有几种常见的ElasticSearch Java API架包,JestClient、SpringBoot整合的SpringData、Spring整合的ElasticsearchTemplate、Elasticsearch Bboss等一些开源架包,上述这些第三方整合的架包中,基本已经支持日常的使用,除了支持的ES版本会低一些而已。
本文介绍的是ElasticSearch官方的的使用,是ElasticSearch官方目前推荐使用的,适用于6.x以上的版本,要求JDK在1.8以上,可以很好的在大版本中进行兼容,并且该架包自身也包含中的方法,可以应对一些特需的情况进行特殊的处理, 它对于一些常用的方法封装Restful风格,可以直接对应操作名调用使用即可,支持同步和异步(Async)调用。
这里我们的使用也可以直接对应上一篇文章中的DSL语句使用,这样的话可以非常方便的对照和学习使用。
在对下述进行操作时,我们先来看下Elasticsearch 的初始化连接写法吧。
是不是很简单呢,关闭也很简单,client不为空直接close即可!
ElasticSearch可以直接新增数据,只要你指定了index(索引库名称)和type(类型)即可。在新增的时候你可以自己指定主键ID,也可以不指定,由 ElasticSearch自身生成。Elasticsearch 新增数据提供了三种方法,这里我们就来看一下这三种写法吧。
新增数据代码示例一,通过jsonString进行创建:
新增数据代码示例二,通过map创建,会自动转换成json的数据:
新增数据代码示例三,通过XContentBuilder对象进行创建:
上述三种方法中,个人推荐第二种,比较容易理解和使用。
新增索引库的代码示例:
注:创建索引库的时候,一定要先判断索引库是否存在!!!
这里创建索引库的时候顺便也指定了别名(alias),这个别名是一个好东西,使用恰当可以提升查询性能,这里我们留着下次在讲。
ES提供修改API的时候,有两种方式,一种是直接修改,但是若数据不存在会抛出异常,另一种则是存在更新,不存着就插入。相比第一种,第二种会更加好用一些,不过在写入速度上是不如第一种的。
ES修改的代码示例:
注:upsert 方法表示如果数据不存在,那么就新增一条,默认是false。
根据上述的几个操作,想必不用多说,已经知道了是DELETE方法了,那我们就直接开始吧。
ES根据ID删除代码示例:
ES根据条件进行删除:
测试结果
示例图:
几个常用的查询API这里就简单的介绍下用法,然后再直接给出所有的查询语句代码。
查询API
- 等值(term查询:QueryBuilders.termQuery(name,value);
- 多值(terms)查询:QueryBuilders.termsQuery(name,value,value2,value3...);
- 范围(range)查询:QueryBuilders.rangeQuery(name).gte(value).lte(value);
- 存在(exists)查询:QueryBuilders.existsQuery(name);
- 模糊(wildcard)查询:QueryBuilders.wildcardQuery(name,+value+);
- 组合(bool)查询: BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
查询所有代码示例
一般查询代码示例
其实就是等值查询,只不过在里面加入了分页、排序、超时、路由等等设置,并且在查询结果里面增加了一些处理。
或查询
其实这个或查询也是bool查询中的一种,这里的查询语句相当于SQL语句中的
SELECT * FROM test1 where (uid = 1 or uid =2) and phone =
代码示例:
模糊查询
相当于SQL语句中的like查询。
多值查询
也就是相当于SQL语句中的in查询。
存在查询
判断是否存在该字段,用法和SQL语句中的exist类似。
范围查询
和SQL语句中<>使用方法一样,其中gt是大于,lt是小于,gte是大于等于,lte是小于等于。
正则查询
ES可以使用正则进行查询,查询方式也非常的简单,代码示例如下:
查询测试结果
=================
=================
模糊查询语句:{"query":{"bool":{"must":[{"wildcard":{"message":{"wildcard":"xu","boost":1.0}}}],"adjust_pure_negative":true,"boost":1.0}}}
模糊查询结果:{msgcode=2, uid=12345, phone=9, sendtime=2019-03-14 01:57:04, message=xuwujing study Elasticsearch}
模糊查询结果:{uid=, phone=, message=xu1, sendtime=2019-03-14 01:57:04}=================
存在查询的DSL语句:{"query":{"exists":{"field":"msgcode","boost":1.0}}}
存在查询的Map结果:{msgcode=2, uid=12345, phone=9, sendtime=2019-03-14 01:57:04, message=xuwujing study Elasticsearch}
存在查询的String结果:{"uid":12345,"phone":9,"msgcode":2,"sendtime":"2019-03-14 01:57:04","message":"xuwujing study Elasticsearch"}
存在查询的Map结果:{msgcode=1, uid=12345, phone=, message=, sendtime=2019-03-14 01:57:04}
存在查询的String结果:{"uid":"12345","phone":"","message":"","msgcode":"1","sendtime":"2019-03-14 01:57:04"}=================
范围查询的DSL语句:{"query":{"range":{"sendtime":{"from":"2019-01-01 00:00:00","to":"2019-12-31 23:59:59","include_lower":true,"include_upper":true,"boost":1.0}}}}
范围查询的String结果:{"uid":12345,"phone":9,"msgcode":2,"sendtime":"2019-03-14 01:57:04","message":"xuwujing study Elasticsearch"}
范围查询的String结果:{"uid":"","phone":"","message":"xu1","sendtime":"2019-03-14 01:57:04"}
范围查询的String结果:{"uid":"12345","phone":"","message":"","msgcode":"1","sendtime":"2019-03-14 01:57:04"}=================
正则查询的DSL语句:{"query":{"regexp":{"message":{"value":"xu[0-9]","flags_value":65535,"max_determinized_states":10000,"boost":1.0}}}}
正则查询的Map结果:{uid=, phone=, message=xu1, sendtime=2019-03-14 01:57:04}
正则查询的String结果:{"uid":"","phone":"","message":"xu1","sendtime":"2019-03-14 01:57:04"}=================
=================
关于SpringBoot集成ElasticSearch和JestClient的使用可以查看这篇文章:SpringBoot整合ElasticSearch实现多版本的兼容
关于ElasticSearch Java API的选择,如果ElasticSearch版本在6.x以前的话,推荐使用JestClient。如果是6.x之后并且有意升级到7.x的话,那么直接使用ES官方的,因为在7.x之后将直接会舍弃的连接方式,目前Spring和SpringBoot集成的ES就是使用该方式(不知后续是否会做调整)。
ElasticSearch实战系列:
ElasticSearch实战系列一: ElasticSearch集群+Kinaba安装教程
ElasticSearch实战系列二: ElasticSearch的DSL语句使用教程---图文详解
原创不易,如果感觉不错,希望给个推荐!您的支持是我写作的最大动力!
版权声明:
作者:虚无境
博客园出处:http://www.cnblogs.com/xuwujing
CSDN出处:http://blog.csdn.net/qazwsxpcm
个人博客出处:http://www.panchengming.com
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/java-jiao-cheng/16311.html