携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第28天,点击查看活动详情
6.1 Elasticsearch入门
- 6.0之后索引对应表,文档对应行,字段对应列
# 6.0 之前
ES索引、类型、文档、字段和MySQL中的 数据库、表、行、列相对应。
ES中文档的数据通常采用的是JSON,JSON中的每一种属性叫字段。
但是在 ES6.0 之后的版本当中,这些关系逐渐要发生变化,主要集中在前两个部分,主要是它想废弃类型的这个概念,那么谁对应表呢:索引。所以,6.0 之后一个索引对应一张表,文档还是对应行,字段还是对应列。6.0 之后仍保留了类型,只不过类型一个固定的单词,而不是表名了,7.0之后就彻底废弃掉了。
-
集群:一台或多台ES服务器组合在一起就是一个集群
-
节点:集群当中的每一台服务器称为节点
-
分片:一个索引也就是一个表,分片指的是对索引进一步的划分,一个索引在存的时候可以拆分成多个分片进
行存储,这样的话并发能力就提高了。
-
副本:副本是对分片的备份,一个分片可以包含多个副本,有了备份以后,万一说某一个副本数据丢了,挂
了,那么还有其他的备份,这样的话提高系统的可用性。
安装ES
将下载好的压缩包解压缩
解压好之后我们需要稍微改一下它的配置
然后我们来配置一下环境变量,因为一会我们会通过命令行的方式运行ES的常用命令,
然后我们还要装一个中文的分词插件,为什么呢,比如搜“互联网校招”,肯定是分成“互联网”和“校招”分别查询
这个分词插件在GitHub上
下载链接:
https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.4.3/elasticsearch-analysis-ik-6.4.3.zip
下载好压缩包之后必须解压缩到固定的目录下,首先进入elasticsearch-6.4.3\plugins 目录下, 然后自己新建一个ik文件夹 我们在将elasticsearch ik解压到ik文件夹下 记住千万不要 将elasticsearch-analysis-ik-6.4.3这个文件夹放入到ik 我们只需要将 elasticsearch-analysis-ik-6.4.3 里的那些文件放入到 ik 即可
如果有网络新词出现
然后我们再安装一个文件
postman可以模拟web客户端, 说白了可以模仿网页,发送http请求,为什么需要这么一个工具呢,因为其实我们直接通过命令行去访问ES服务器,如果是查询某些东西还好,但是如果要往里面存东西,这个命令太长了,记不住,也很难写,因为ES支持用http方式去访问,如果我们有一个现成的网页,有一个框往里面填数据很方便,但是我们没有这个网页,那么这个 postman 就能替代那个网页,然后可以通过框构造一些数据提交给ES服务器,这样比较方便。即便是我们从ES中搜索数据,如果说我们搜索的规则比较复杂,那个时候命令也很难写,使用postman会比较方便。总之,为了提高入门ES使用的体验,我们使用postman。
演示使用ES
首先我们演示如何通过命令行的方式访问它,当然在访问之前,我们得将 elasticsearch 启动起来
这里我们双击
打开命令行工具cmd作为客户端访问一下服务器
# ES命令
查看ES集群的健康状况
curl -X GET "localhost:9200/_cat/health?v"
查看集群中有什么节点
curl -X GET "localhost:9200/_cat/nodes?v"
查看当前的ES服务器有多少个索引
curl -X GET "localhost:9200/_cat/indices?v"
创建索引
curl -X PUT "localhost:9200/test"
删除索引
curl -X DELETE "localhost:9200/test"
接下来演示一下使用postman来代替web客户端去访问ES
如何往ES里面插入数据,改数据和插入数据是一样的,只不过是把提交的数据修改一下再插入,ES底层会先删再添加
查询某条数据
删除某条数据
ES存在的价值在于它里面的数据能够被我们搜索,这个搜索不是像查数据库,而是说提供一句话,需要分词,再去库里去匹配,匹配的时候还不是固定的某一个字段,既想搜title,又想搜content,是全文的匹配,那么数据库这一点是做不到的,它不能分词,接下来演示一下如何实现这种搜索,我们先往里面存三条数据,
三条数据都插入了,接下来是搜索了
localhost:9200/test/_search
没有加条件就是全部搜索
搜索标题title,查询标题有“互联网”字样的
localhost:9200/test/_search?q=title:互联网
搜索内容中含有"运营实习"字样的
localhost:9200/test/_search?q=content:运营实习
既要搜title又要搜content,只要包含这个词条都显示出来,这时候搜的逻辑就有点复杂了,通过路径搞不定了,
路径
localhost:9200/test/_search
具体的搜索条件在Body中提交
{
"query": {
"multi_match": {
"query": "互联网",
"fields": ["title", "content"]
}
}
}