当前位置:网站首页 > Java教程 > 正文

elastic java api教程



在上一篇中介绍了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

  • 上一篇: java复杂教程
  • 下一篇: 编程java教程教材
  • 版权声明


    相关文章:

  • java复杂教程2024-12-02 16:50:00
  • 我的世界java 教程2024-12-02 16:50:00
  • java教程大纲2024-12-02 16:50:00
  • java192教程2024-12-02 16:50:00
  • 44集java全套教程2024-12-02 16:50:00
  • 编程java教程教材2024-12-02 16:50:00
  • java swt教程2024-12-02 16:50:00
  • 开课吧高级java教程2024-12-02 16:50:00
  • java加光影教程2024-12-02 16:50:00
  • java聚合函数教程2024-12-02 16:50:00