Python微信订餐小程序课程视频
https://edu.csdn.net/course/detail/36074
Python实战量化交易理财系统
https://edu.csdn.net/course/detail/35475v阅读目录* v基础概念
Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析和探索的能力。充分利用Elasticsearch的水平伸缩性,能使数据在生产环境变得更有价值。Elasticsearch 的实现原理主要分为以下几个步骤,首先用户将数据提交到Elasticsearch 数据库中,再通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据,当用户搜索数据时候,再根据权重将结果排名,打分,再将返回结果呈现给用户。
在上一篇文章linux安装elasticsearch中,已经介绍了在linux安装elasticsearch,这篇文章主要介绍介绍es的一些基础的入门教程、docker安装elasticsearch以及在springboot中整合elasticsearch。
回到顶部## v基础概念
1.0 Node与Cluster
Node:单个Elastic实例称为一个节点(node)
Cluster:一组节点构成一个集群(cluster)
当然,这也正是集群和节点最通俗的解释,这个解释适用于绝大部分,类似elasticsearch这种分布式架构。如之前讲过的《详解Redis Cluster集群》。你可以可以说node就是单个redis实例,这样的实例我们称为一个节点,多个这样的节点组成的集群。正因为如此,我们在设计架构的时候,需要考虑不同环境的不同节点的节点名注意不要重复,避免配置集群遇到尴尬。
1.1 Index
由一个和多个分片组成,通过索引的名字在集群内进行唯一标识。索引是具有某种相似特征的文档的集合,Elastic数据管理的顶层设计就叫做 Index(索引)。类似mysql中的database。
索引也分为名次索引和动词索引。
- 索引(名词):如前所述,一个 索引 类似于传统关系数据库中的一个 数据库 ,是一个存储关系型文档的地方。 索引 (index) 的复数词为 indices 或 indexes 。
- 索引(动词):索引一个文档 就是存储一个文档到一个 索引 (名词)中以便被检索和查询。这非常类似于 SQL 语句中的 INSERT 关键词,除了文档已存在时,新文档会替换旧文档情况之外。
这个也好理解,类似词组"表演",看她的表演,表演的很精彩。这是两个意思。
1.2 Document
Elasticsearch是面向文档的,意味着它存储整个对象或文档。文档是可以被索引的基本信息单元,文档用JSON表示。
例如:存储员工信息,那就是一个员工信息代表一个文档,多个文档组成一个index。类似于关系型数据库中的一条数据通过id在Type内进行唯一标识。
1.3 Type
类别,指索引内部的逻辑分区,通过type的名字在索引内进行唯一标识。在查询时如果没有该值,则表示在整个索引中查询。
例如:在员工表里,可以按照员工籍贯分组(北上、上海、广州),也可以按照员工工种分组(职能、产品、运营)。这种分组可以理解为type。
在7.x版会移除Type。Elasticsearch为何要在7.X版本中去除type
1.4 与关系型数据库对比
Relational DB | Elasticsearch |
---|---|
数据库(database) | 索引 index |
表(tables) | 类型 types |
行(rows) | 文档 documents |
字段(columns) | fields |
1.5 Mapping
定义文档及其包含的字段是如何存储和索引的过程,类似于数据库中的表结构定义,主要作用如下:
- 定义index下的字段名
- 定义字段类型,比如数值型、浮点型、布尔型等
- 定义倒排索引相关的设置,比如是否索引、记录position等
回到顶部## vdocker安装Elasticsearch
在上一篇文章中,已经详细介绍了linux安装elasticsearch,这篇文章讲解的elasticsearch主要围绕docker展开。
2.0 拉取镜像
docker pull docker.io/elasticsearch:版本号
版本号是可选的,默认使用latest
2.1 创建&运行容器
docker run -d --name=es7 \
-p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" elasticsearch:7.5.1
注意:若创建es持久化目录,则按下面的命令执行。
mkdir -p /data/elasticsearch
docker cp es7:/usr/share/elasticsearch/data /data/elasticsearch/
docker cp es7:/usr/share/elasticsearch/logs /data/elasticsearch/
docker rm -f es7
docker run -d --name=es7 \
--restart=always \
-p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-v /data/elasticsearch/data:/usr/share/elasticsearch/data \
-v /data/elasticsearch/logs:/usr/share/elasticsearch/logs \
elasticsearch:7.5.1
注意:若es起不来,可能是容器没有宿主机挂载的目录的读写权限,那就需要赋予它读写权限: chmod 777 /data/elasticsearch
2.2 验证效果
输入ip + 端口号(9200)验证。
2.3 安装elasticsearch-head
docker pull mobz/elasticsearch-head:5
2.4 创建&运行head容器
docker run -d --name elasticsearch-head -p 9100:9100 mobz/elasticsearch-head:5
2.5 跨域问题
url访问http://toutou.com:9100之后发现无法连接http://toutou.com:9200,需要在es服务端做CORS的配置。
修改docker中es7的elasticsearch.yml文件
[root@localhost data]# docker exec -it es7 /bin/bash
[root@f1358d18c9be elasticsearch]# vi config/elasticsearch.yml
在elasticsearch.yml底部追加如下配置:
http.cors.enabled: true
http.cors.allow-origin: "*"
保存以后退出docker并重启docker实例。
[root@f1358d18c9be elasticsearch]# exit
exit
[root@localhost data]# docker restart es7
es7
2.6 验证elasticsearch-head
2.7 安装中文分词器ik
注意:ik分词器的版本需要和es的版本一致。
docker exec -it es7 /bin/bash
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.5.1/elasticsearch-analysis-ik-7.5.1.zip
-> Downloading https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.5.1/elasticsearch-analysis-ik-7.5.1.zip
进入plugins可以看到IK分词器已经安装成功,重启docker实例即可。
回到顶部## vRESTful API
任何语言都可以使用RESTful API通过9200端口(默认端口号)和Elasticsearch进行通信,也可以用web客户端(浏览器Sense插件、postman)访问 Elasticsearch ,甚至直接使用curl命令就可以和Elasticsearch交互。
Elasticsearch为很多语言(Groovy、JavaScript、.NET、 PHP、 Perl、 Python 和 Ruby)提供了官方客户端。详情:Elasticsearch Clients。
3.0 Elasticsearch请求格式:
Elasticsearch请求和我们认识的其它HTTP请求一样,由多个部件组成,具体格式如下:
curl -X<VERB> '<PROTOCOL>://&l