ElasticSearch搜索引擎-1_学习笔记(2021.4.11)
前言: (官网)
ElaticSearch
,简称为es, es是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。es也使用Java开发并使用Lucene
作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。The Elastic Stack, 包括 Elasticsearch、Kibana、Beats 和 Logstash(也称为 ELK Stack)。 能够安全可靠地获取任何来源、任何格式的数据,然后实时地对数据进行搜索、分析和可视化 (日志查看系统)。
1.0 Docker环境下安装ElasticSearch
(官网文档)
1.1.1 拉取ElasticSearch
镜像
[root@VM-0-9-centos ~]# docker pull docker.elastic.co/elasticsearch/elasticsearch:7.12.0
1.1.2 启动ElasticSearch
容器
使用Docker启动单节点集群 (集群启动方式看官网)
[root@VM-0-9-centos ~]# docker run -id --name=MyElasticSearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" 9337ed510a0c
然后登录进去
docker exec -it 8ba3a70acb87 /bin/bash
, 拷贝一份配置文件夹与插件文件夹
docker cp 8ba3a70acb87:/usr/share/elasticsearch/config /usr/local/zhihao_ElasticSearch
docker cp 8ba3a70acb87:/usr/share/elasticsearch/plugins /usr/local/zhihao_ElasticSearch
然后停止删除容器, 以目录挂载方式启动
docker run -id --name=MyElasticSearch -p 9200:9200 -p 9300:9300 -v /usr/local/zhihao_ElasticSearch/config:/usr/share/elasticsearch/config -v /usr/local/zhihao_ElasticSearch/plugins:/usr/share/elasticsearch/plugins -e "discovery.type=single-node" 9337ed510a0c
如果容器启动失败, 可能原因是JVM或者服务器机子内存太小, 如果是JVM可以通过修改
config/jvm.options
配置文件, 搜索-Xms
# 设置 JVM 初始内存为 1G。此值可以设置与-Xmx 相同,以避免每次垃圾回收完成后 JVM 重新分配内存 # 设置 JVM 最大可用内存为 1G -Xms1g -Xmx1g
目录 含义:
bin
可执行脚本目录 、config
配置目录 、jdk
内置 JDK 目录 、lib
类库 、logs
日志目录 、modules
模块目录 、plugins
插件目录注意:9300 端口为 Elasticsearch 集群间组件的通信端口,9200 端口为浏览器访问的 http 协议 RESTful 端口。
测试是否正常启动成功, 浏览器访问:
http://119.xx.xxx.xxx:9200/
, 出现下面画面则说明正常启动成功。
2.0 ElasticSearch
相关概念、数据格式
2.1.1 概述
Elasticsearch是面向文档(documentoriented)的,这意味着它可以存储整个对象或文档(document)。然而它不仅仅是存储(store),还会索引(index)每个文档的内容使之可以被搜索。在Elasticsearch中,你可以对文档(而非成行成列的数据)进行索引、搜索、排序、过滤。
2.1.2 Elasticsearch比较传统关系型数据库如下:
MySQL
关系型数据库采用的是正排索引,ElasticSearch
采用的是倒排索引
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QW2ZEtal-1618152497420)(https://z3.ax1x.com/2021/04/11/c0sKkq.jpg)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G8XvVrf5-1618152497421)(https://z3.ax1x.com/2021/04/11/c0BaAP.jpg)]
2.1.3 索引 index
一个索引就是一个拥有几分相似特征的文档的集合。比如说,你可以有一个客户数据的索引,另一个产品目录的索引,还有一个订单数据的索引。一个索引由一个名字来标识(必须全部是小写字母的),并且当我们要对对应于这个索引中的文档进行索引、搜索、更新和删除的时候,都要使用到这个名字。在一个集群中,可以定义任意多的索引。
2.1.4 类型 type
在一个索引中,你可以定义一种或多种类型。一个类型是你的索引的一个逻辑上的分类/分区,其语义完全由你来定。通常,会为具有一组共同字段的文档定义一个类型。比如说,我们假设你运营一个博客平台并且将你所有的数据存储到一个索引中。在这个索引中,你可以为用户数据定义一个类型,为博客数据定义另一个类型,当然,也可以为评论数据定义另一个类型。
2.1.5 文档 document
一个文档是一个可被索引的基础信息单元。比如,你可以拥有某一个客户的文档,某一个产品的一个文档,当然,也可以拥有某个订单的一个文档。文档以JSON(Javascript Object Notation)格式来表示,而JSON是一个到处存在的互联网数据交互格式。
在一个index/type里面,你可以存储任意多的文档。注意,尽管一个文档,物理上存在于一个索引之中,文档必须被索引/赋予一个索引的type。
2.1.6 字段Field
相当于是数据表的字段,对文档数据根据不同属性进行的分类标识
2.1.7 映射 mapping
mapping是处理数据的方式和规则方面做一些限制,如某个字段的数据类型、默认值、分词器、是否被索引等等,这些都是映射里面可以设置的,其它就是处理es里面数据的一些使用规则设置也叫做映射,按着最优规则处理数据对性能提高很大,因此才需要建立映射,并且需要思考如何建立映射才能对性能更好。例如:
2.1.8 接近实时 NRT
Elasticsearch是一个接近实时的搜索平台。这意味着,从索引一个文档直到这个文档能够被搜索到有一个轻微的延迟(通常是1秒以内)
扩展:
3.0 elasticsearch-head (官网)
elasticsearch-head
是用于监控 Elasticsearch 状态的客户端插件,包括数据可视化、执行增删改查操作等。
3.1.1 Docker环境下载安装
docker run -p 9100:9100 mobz/elasticsearch-head:5
3.1.2 访问http://119.xx.xx.xxx:9100/
然后输入
elasticsearch
地址进行连接, 然后如果连接不上, 浏览器控制台报跨域异常, 则需要解决跨域问题。
修改elasticsearch/config下的配置文件:elasticsearch.yml,增加以下三句命令:
network.host: 119.xx.xx.xxx
http.cors.enabled: true
http.cors.allow-origin: "*"
其中:
http.cors.enabled:true:此步为允许elasticsearch跨域访问,默认是false。
http.cors.allow-origin:"*":表示跨域访问允许的域名地址(*表示任意)。
network.host: 119.xx.xx.xxx:主机域名
【重启Elasticsearch】