安装篇
下载与配置
官网下载地址:https://www.elastic.co/cn/downloads/
找到自己系统对应的版本,本文以Linux系统为例,只阐述单机版安装
1 | # 添加新用户 |
因为刚刚我们是使用root用户操作的,所以我们还需要更改一下/soft文件夹的所属,改为els用户
1 | chown -R els:els /soft/ |
然后在切换成elsearch用户进行操作
1 | # 切换用户 |
然后我们就可以对我们的配置文件进行修改了
1 | # 进入到 elsearch下的config目录 |
然后找到下面的配置
1 | #打开配置文件 |
然后在修改第二处的配置,这个配置要求我们到宿主机器上来进行配置
1 | # 到宿主机上打开文件 |
启动ElaticSearch
首先我们需要切换到 elsearch用户
1 | su - els |
然后在到bin目录下,执行下面
1 | # 进入bin目录 |
启动成功后,访问下面的URL
1 | http://ip:9200/ 注意:服务器上的9200端口必须得打开 |
如果出现以下信息,表示已经安装成功
1 | { |
如果出现错误可以查看ElasticSearch日志查看对应错误,或者访问https://u19900101.github.io/2021-06-28-ElasticSearch/#%E9%94%99%E8%AF%AF%E5%88%86%E6%9E%90 查看对应错误的处理方法。
可视化界面
打开chrome的应用商店,在里面搜索ElasticSearch head 安装插件后,配置访问地址 ip:9200就可以看到数据
操作篇
基本概念
索引
- 索引(index)是ElasticSearch对逻辑数据的逻辑存储,所以它可以分为更小的部分。
- 可以把索引看成关系型数据库的表,索引的结构是为快速有效的全文索引准备的,特别是它不存储原始值。
- ElasticSearch可以把索引存放在一台机器或者分散在多台服务器上,每个索引有一或多个分片(shard),每个分片可以有多个副本(replica)。
文档
- 存储在Elasticsearch中的主要实体叫文档(document)。用关系型数据库来类比的话,一个文档相当于数据库表中的一行记录。
- ElasticSearch和MongoDB中的文档类似,都可以有不同的结构,但ElasticSearch的文档中,相同字段必须有相同类型。
- 文档由多个字段组成,每个字段可能多次出现在一个文档里,这样的字段叫多值字段(multivalued)。每个字段的类型,可以是文本、数值、日期等。字段类型也可以是复杂类型,一个字段包含其他子文档或者数组。
映射
- 所有文档写进索引之前都会先进行分析,如何将输入的文本分割为词条、哪些词条又会被过滤,这种行为叫做映射(mapping)。一般由用户自己定义规则。
文档类型
- 在ElasticSearch中,一个索引对象可以存储很多不同用途的对象。例如,一个博客应用程序可以保存文章和评论。
- 每个文档可以有不同的结构。
- 不同的文档类型不能为相同的属性设置不同的类型。例如,在同一索引中的所有文档类型中,一个叫title的字段必须具有相同的类型。
操作
创建空索引
这里只是空索引,后续加了分词器,需要指明分词器
1 | PUT /haoke |
删除索引
1 | #删除索引 |
插入数据
URL规则: POST /{索引}/{类型}/{id}
1 | POST /haoke/user/1001 |
更新数据
全局更新
在Elasticsearch中,文档数据是不为修改的,但是可以通过覆盖的方式进行更新。
1 | PUT /haoke/user/1001 /索引/类型/id PUT方法 |
更新后,对应的数据id不会变化,发生变化的只是字段和version
局部更新
可以看到数据已经被覆盖了。问题来了,可以局部更新吗? – 可以的。前面不是说,文档数据不能更新吗? 其实是这样的:在内部,依然会查询到这个文档数据,然后进行覆盖操作,步骤如下:
- 1、从旧文档中检索JSON
- 2、修改它
- 3、删除旧文档
- 4、索引新文档
1 | #注意:这里多了_update标识 |
删除文档
在Elasticsearch中,删除文档数据,只需要发起DELETE请求即可,不用额外的参数
1 | DELETE /haoke/user/1001 |
需要注意的是,result表示已经删除,version也增加了。
如果删除一条不存在的数据,会响应404
搜索数据
根据id搜索数据
1 | GET /haoke/user/BbPe_WcB9cFOnF3uebvr |
搜索全部数据
1 | GET 1 /haoke/user/_search * 后面_search是固定标识 |
注意,使用查询全部数据的时候,默认只会返回10条
返回结果:
1 | { |
关键字搜索数据
1 | #查询年龄等于20的用户 |
DSL搜索
Elasticsearch提供丰富且灵活的查询语言叫做DSL查询(Query DSL),它允许你构建更加复杂、强大的查询。 DSL(Domain Specific Language特定领域语言)以JSON请求体的形式出现。
1 | POST /haoke/user/_search |
实现:查询年龄大于30岁的男性用户。
1 | POST /haoke/user/_search |
全文搜索
1 | POST /haoke/user/_search |
高亮显示,只需要在添加一个 highlight即可
1 | POST /haoke/user/_search |
聚合
在Elasticsearch中,支持聚合操作,类似SQL中的group by操作。
将年龄进行聚合
1 | POST /haoke/user/_search |
ElasticSearch核心详解
在Elasticsearch中,文档以JSON格式进行存储,可以是复杂的结构,如:
1 | { |
其中,card是一个复杂对象,嵌套的Card对象
元数据
一个文档不只有数据。它还包含了元数据(metadata)——关于文档的信息。三个必须的元数据节点是:
- _index : 文档存储的地方
- _type : 文档代表的对象的类
_id : 文档的唯一标识