ElasticSearch学习
本文最后更新于:3 年前
这是ElasticSearch技术的相关学习嗷!
ES概述:
- 开源的高拓展的分布式全文搜索i引擎
安装:
Windows版本是一个zip,解压缩就能用嗷!!!
bin中有一个.bat文件:
和JMeter一样,解压缩就能够使用嗷!!!
启动结果:
1 |
|
- 可能出现的问题以及解决措施:
- JSON中的集合可以使用[],并且在其中列出每一个元素来表示嗷!!!
基本概念:
- 类比:
- 倒排索引:
和正向索引相对应
what is 正向索引?
通过主键关联文章,在文章中去一个个查对应的值
what is 倒排索引?
将查询关键字和主键关联,从而建立和文章的关联
这样找某个关键词就不用扫描所有的行去获得,直接根据我们记录的倒排列表,找到列表中对应的行,然后查找对应的行就行了嗷!!!
倒排索引创建索引的流程:
1) 首先把所有的原始数据进行编号,形成文档列表
2) 把文档数据进行分词,得到很多的词条,以词条为索引。保存包含这些词条的文档的编号信息。
搜索的过程:
当用户输入任意的词条时,首先对用户输入的数据进行分词,得到用户要搜索的所有词条,然后拿着这些词条去倒排索引列表中进行匹配。找到这些词条就能找到包含这些词条的所有文档的编号。
然后根据这些编号去文档列表中找到文档
作者:喔喔牛
链接:https://www.zhihu.com/question/23202010/answer/254503794
来源:知乎
索引操作:
- 对比关键型数据库,创建索引等同于创建数据库嗷!!!
PUT创建索引:
Put请求具有幂等性,就是反复提交都是一样的结果,没有影响嗷!!!
Post请求在这种情况下无法使用嗷!!!
GET获得索引信息:
如果想要查看所有的索引,也是GET,但是就要使用特殊路径了嗷!!!
http://127.0.0.1:9200/_cat/indices?v
DELETE删除索引:
再去查看索引信息:
发现被成功删除了嗷!!!
文档操作:
POST创建文档:
下面这个id是唯一标识嗷,同样的请求发出之后,id会有不同。因此POST请求不是幂等性的嗷!!!PUT不行,因为PUT是幂等性的操作!!!
- 自定义ID如何进行:
这样每次返回值就是一样的了嗷!!!这是啥???这是幂等性操作!!!我们再来试试PUT!!!成功了!!!
- 并且上面这种方式,使用PUT也能够成功CREAT嗷!!!
GET获得文档信息:
这个_id就类似于我们的主键嗷!!!
如果查不到的话下面那个found就会为false
如果想要查找所有文档数据呢?
PUT更新文档信息:
- 上面这种称之为全量数据的更新
- 更新局部的数据,每次更新结果是不一样的,不符合幂等性,因此用POST请求嗷!!!
注意地址中间是update嗷!!!
DELETE删除文档:
不能够重复删除嗷!!!
条件查询:
分页查询和排序等:
- 上面的请求参数不好加哈,而且容易乱码,写到请求体中
- 全部查询:
- 分页查询方式:
上面这个就是分页查询,从第几页开始,查多少条记录这种嗷!!!
至于这个分页的情况下,页码的计算公式如下:
这种方式就能够非常方便的计算出我们现在的那条数据在第几页嗷!!!
- 过滤数据源,只显示某些字段:
在JSON中添加对应的字段的指定嗷!!!
- 甚至可以对于特定的字段排序:
用什么排序,以及怎么排序嗷!!!
范围查询和逻辑连接等:
上面match中的就是条件,例如”_source”中的category等,限制它们匹配等。
相当于逻辑判断中的and
- 那么如果想用逻辑判断中的or呢?
- 范围的查询:
再多加上一个条件嗷!!!
完全匹配和高亮显示等:
- 在保存文档数据的时候,ElasticSearch会自动对于文档进行分值拆解工作,将拆解后的数据保存在倒排索引当中。即使使用文字的一部分也能够成功查询到数据。
- ES查询的时候也会将我们查询的内容分解,然后去索引中找到对应的值进行匹配。导致”小华“,既可以查到小米,又可以查到华为嗷!!!这个肯定是有问题的!!!
- 那么如何进行完全匹配呢?
- 高亮显示如何做到呢?
聚合查询:
- 分组统计:
- 平均值:
- 创建Mapping:
查询验证:
Java操作ES:
- 建立项目
- POM
- 测试
索引操作:
连接测试:
1 |
|
创建索引:
1 |
|
查询索引:
1 |
|
- 这里其实就获取到了对应的属性嗷!!!
删除索引:
1 |
|
- summary:
- 构建对应操作的Request
- 利用client发送到ES,并获得对应的返回结果Response
- 分析Response
文档操作:
插入数据:
1 |
|
更新数据:
1 |
|
查询数据:
1 |
|
删除数据:
1 |
|
批量更新&批量删除:
1 |
|
1 |
|
高级查询:
全量查询:
1 |
|
- 准备工作先插入数据嗷!!!
- 下面就是查询代码:
1 |
|
条件查询:
1 |
|
- 实际上就是构造的query条件不一样而已嗷!!!
分页查询:
1 |
|
查询排序:
1 |
|
- 本质上就是设置builder,然后将对应设置好的builder添加到request中嗷!!!通过request去执行嗷!!!有点像定制化装配builder,然后request带去执行的感觉嗷!!!
字段过滤:
1 |
|
组合查询:
1 |
|
范围查询:
1 |
|
- 最大的builder是SearchSourceBuilder
- 下面还有类似于BoolQueryBuilder和RangeQueryBuilder等下属builder
- 设置完对应的条件之后,再整体组装为大的builder即可实现不同的功能嗷!!!
模糊查询:
- 讲的太乱了,后面补上,服了这个老师了。