Elastic Search高级操作(脚本操作&&JAVA操作)

Elastic Search高级操作

在这里插入图片描述
小编在这里先介绍一下,Elastic Search高级操作分为:批量操作、导入数据、ES的各种那个查询、索引别名和重建索引,下面的各种操作小编都会介绍两种操作方式,里面有的可能会介绍不对,请各位及时在评论区提出意见,这也是小编的学习笔记,拿出来与各位分享,话不多说,开始正式的内容

Elastic Search高级操作(脚本操作&&JAVA操作)_第1张图片

批量操作

批量操作-脚本

在这里插入图片描述
Elastic Search高级操作(脚本操作&&JAVA操作)_第2张图片
Json必须一行,换行不支持操作。

Elastic Search高级操作(脚本操作&&JAVA操作)_第3张图片
操作,每个成功与否不会干预其他,都会执行。看status码
Elastic Search高级操作(脚本操作&&JAVA操作)_第4张图片

批量操作-JAVA

Elastic Search高级操作(脚本操作&&JAVA操作)_第5张图片
在这里插入图片描述

导入数据

Elastic Search高级操作(脚本操作&&JAVA操作)_第6张图片
Elastic Search高级操作(脚本操作&&JAVA操作)_第7张图片
首先先看下goods表的结构及数据
Elastic Search高级操作(脚本操作&&JAVA操作)_第8张图片
Elastic Search高级操作(脚本操作&&JAVA操作)_第9张图片
Elastic Search高级操作(脚本操作&&JAVA操作)_第10张图片
按数据库结构,创建索引
Elastic Search高级操作(脚本操作&&JAVA操作)_第11张图片
索引创建完毕,添加文档,导入数据
Elastic Search高级操作(脚本操作&&JAVA操作)_第12张图片

导入数据的java操作方式

在之前的maven工程下先导入mybatis、fastjson的依赖。
Elastic Search高级操作(脚本操作&&JAVA操作)_第13张图片
然后配置application相关的mybatis数据源配置。
Elastic Search高级操作(脚本操作&&JAVA操作)_第14张图片
在application扫描了mybatis的domain文件夹。然后我们创建实体,映射数据库表结构信息。
由于spec在数据库是varchar类型,将来要存储成json形式的数据格式,所以我们将sepc的数据类型设置为map。然后再设置一个为string类型的specStr字段,作为接收数据库的信息。

Elastic Search高级操作(脚本操作&&JAVA操作)_第15张图片
对应生成,get、set、toString方法,用Lombok插件也可以。
创建mapper接口,和resource下对应的mapper文件夹及GoodMapper.xml

Elastic Search高级操作(脚本操作&&JAVA操作)_第16张图片
Mapper的初始化示例如下:
在这里插入图片描述
Elastic Search高级操作(脚本操作&&JAVA操作)_第17张图片
测试下:
在之前的测试类中,@Autowrid一下goodsMapper,然后执行如下:

Elastic Search高级操作(脚本操作&&JAVA操作)_第18张图片
Elastic Search高级操作(脚本操作&&JAVA操作)_第19张图片
去kibana里查询一下,发现specStr我们没有用处,我们可以在实体类里给specStr加个注解,这样他就不会加入到ES中。
在这里插入图片描述

ES的各种查询(重点)

matchAll查询-脚本
//查询出来默认是10条
GET goods/_search
{
	“query”:{
		“match_all”: {}
	}
}

Elastic Search高级操作(脚本操作&&JAVA操作)_第20张图片
若想查询全部数据,算上分页,如下:
Elastic Search高级操作(脚本操作&&JAVA操作)_第21张图片
右侧Took参数代表时间,它是有缓存的越查询越快,timeout是超时秒,_shards是分片信息,hits是命中,命中多少数据,max_score得分,得分越高就越排在前面。后续根据得分进行排序。

matchAll查询-JAVA

查询有多少条记录
Elastic Search高级操作(脚本操作&&JAVA操作)_第22张图片
继续写获取具体的数据
Elastic Search高级操作(脚本操作&&JAVA操作)_第23张图片Elastic Search高级操作(脚本操作&&JAVA操作)_第24张图片
Elastic Search高级操作(脚本操作&&JAVA操作)_第25张图片
由于是默认显示10条,我们要按分页查,或者查一条多少条,我们改下上面的query查询条件。
Elastic Search高级操作(脚本操作&&JAVA操作)_第26张图片
这样就查出100条数据。

term查询-脚本

Elastic Search高级操作(脚本操作&&JAVA操作)_第27张图片
Elastic Search高级操作(脚本操作&&JAVA操作)_第28张图片

term查询-JAVA

跟之前唯一的求别就是QueryBuilder的查询方法变成.termQuery
Elastic Search高级操作(脚本操作&&JAVA操作)_第29张图片

match查询-脚本

or是分别查,然后取并集,and是同时符合的数据
Elastic Search高级操作(脚本操作&&JAVA操作)_第30张图片
Elastic Search高级操作(脚本操作&&JAVA操作)_第31张图片

match查询-JAVA

跟之前唯一的求别就是QueryBuilder的查询方法变成.matchQuery,默认是or查询
Elastic Search高级操作(脚本操作&&JAVA操作)_第32张图片
那怎么指定and查询呢,可以使用MatchQueryBuilder代码如下:
Elastic Search高级操作(脚本操作&&JAVA操作)_第33张图片

模糊查询-脚本

Elastic Search高级操作(脚本操作&&JAVA操作)_第34张图片
Elastic Search高级操作(脚本操作&&JAVA操作)_第35张图片
使用通配符wildcard来进行查询,华、华?等。。。,若写?华、华这种前面加通配符,他的效率不会很高。
Elastic Search高级操作(脚本操作&&JAVA操作)_第36张图片
使用正则regexp来进行查询,它的性能是根据正则的性能来确定的,性能也不是很高
Elastic Search高级操作(脚本操作&&JAVA操作)_第37张图片
使用前缀prefix来进行查询,他对keyword的类型支持比较好,对text不太好。
Elastic Search高级操作(脚本操作&&JAVA操作)_第38张图片

模糊查询-JAVA

通配符查询WiljdcardQueryBuilder
Elastic Search高级操作(脚本操作&&JAVA操作)_第39张图片
正则查询RegexQueryBuilder
Elastic Search高级操作(脚本操作&&JAVA操作)_第40张图片
前缀查询PrefixQueryBuilder
Elastic Search高级操作(脚本操作&&JAVA操作)_第41张图片

范围查询-脚本

Range查询
Elastic Search高级操作(脚本操作&&JAVA操作)_第42张图片
查处结果后,再加上排序,asc从小到大,desc从大到小
Elastic Search高级操作(脚本操作&&JAVA操作)_第43张图片

范围查询-JAVA

Elastic Search高级操作(脚本操作&&JAVA操作)_第44张图片
查处结果后,再加上排序,asc从小到大,desc从大到小
Elastic Search高级操作(脚本操作&&JAVA操作)_第45张图片

queryString查询-脚本

多字段同时查询,queryString是一种多字段查询方式。他跟match的区别是它可以多字段。
Elastic Search高级操作(脚本操作&&JAVA操作)_第46张图片
默认就是分词,输入华为手机,他就分为华为、手机,等同于 华为 OR 手机。
Elastic Search高级操作(脚本操作&&JAVA操作)_第47张图片
我们还可以查华为 and 手机
Elastic Search高级操作(脚本操作&&JAVA操作)_第48张图片
还要介绍下simple_query_string它不支持 OR和AND,如果你写 华为 AND 手机,他会默认这是三个词。
Elastic Search高级操作(脚本操作&&JAVA操作)_第49张图片

queryString查询-JAVA

QueryStringQueryBuilder
在这里插入图片描述

布尔查询-脚本(重点)

Elastic Search高级操作(脚本操作&&JAVA操作)_第50张图片
Elastic Search高级操作(脚本操作&&JAVA操作)_第51张图片
Elastic Search高级操作(脚本操作&&JAVA操作)_第52张图片

聚合查询-脚本

Elastic Search高级操作(脚本操作&&JAVA操作)_第53张图片
指标聚合案例:查询名称是华为的最贵是多少钱?
Elastic Search高级操作(脚本操作&&JAVA操作)_第54张图片
桶聚合案例:将手机的品牌名称分组
terms是对应分组的操作

Elastic Search高级操作(脚本操作&&JAVA操作)_第55张图片

聚合查询-JAVA

查不是最难的,最难的是获取数据,因为要获取分组后的数据
下面操作桶聚合

Elastic Search高级操作(脚本操作&&JAVA操作)_第56张图片
Elastic Search高级操作(脚本操作&&JAVA操作)_第57张图片
Elastic Search高级操作(脚本操作&&JAVA操作)_第58张图片
执行一下
Elastic Search高级操作(脚本操作&&JAVA操作)_第59张图片

高亮查询-脚本

黑马程序员这个字,就是高亮
在这里插入图片描述
首先要确认哪个字段是要做高亮,然后前缀加什么,后缀加什么。
Elastic Search高级操作(脚本操作&&JAVA操作)_第60张图片
若不设置前后缀,默认就是em标签
Elastic Search高级操作(脚本操作&&JAVA操作)_第61张图片

高亮查询-JAVA

我们要将highlight中的信息,替换到titile中这样高亮的标签就会在界面回显
Elastic Search高级操作(脚本操作&&JAVA操作)_第62张图片
高亮设置完下面我们开始替换,下面的数据,遍历hit。
Elastic Search高级操作(脚本操作&&JAVA操作)_第63张图片
查询一下
Elastic Search高级操作(脚本操作&&JAVA操作)_第64张图片

索引别名和重建索引

重建索引

ES不允许修改索引,但是我们业务需要改,ES又不让我们改,我们就用到了重建索引。重建一个新的索引,将原有索引的数据导入到新的索引中。
Elastic Search高级操作(脚本操作&&JAVA操作)_第65张图片

重建索引操作-脚本

新建一个索引
Elastic Search高级操作(脚本操作&&JAVA操作)_第66张图片
添加文档
Elastic Search高级操作(脚本操作&&JAVA操作)_第67张图片
查询一下数据
Elastic Search高级操作(脚本操作&&JAVA操作)_第68张图片
由于现在birthday的字段是date类型,我们之前存的 1999-11-11是能保存的,但是现在存1999年11月11日,就无法保存了,报错如下,解析不了字符串。
Elastic Search高级操作(脚本操作&&JAVA操作)_第69张图片
现在需要改变birthday的字段类型,为text,若直接改原索引的类型由date改为text是不可以的,因为ES不支持,报错如下。
Elastic Search高级操作(脚本操作&&JAVA操作)_第70张图片
创建新的索引,将数据拷贝到新的索引中
Elastic Search高级操作(脚本操作&&JAVA操作)_第71张图片
Elastic Search高级操作(脚本操作&&JAVA操作)_第72张图片
再查询一下
Elastic Search高级操作(脚本操作&&JAVA操作)_第73张图片
这样就完成了索引的重建操作,但是会有个问题,在java中操作es还是使用老的索引,那么如何解决?
第一种:改代码(不推荐)
第二种:索引别名(推荐)

那么第二种具体操作步骤如下:
0、删除老版本的索引库
1、给新的索引起个别名是老的索引名

直接别名老索引会报错
Elastic Search高级操作(脚本操作&&JAVA操作)_第74张图片
那么删除老索引,用新老索引名都能查到。
Elastic Search高级操作(脚本操作&&JAVA操作)_第75张图片
课程到这里就结束了,大家一起实践操作吧!!!

你可能感兴趣的:(笔记,elasticsearch,经验分享)