男女做暖网站,wordpres做影视网站,wordpress主题添加设置页面,工程承包合作协议书简介
ElasticSearch简介#xff1a;简称为es#xff0c; es是一个开源的高扩展的分布式全文检索引擎#xff0c;它可以近乎实时的存储、检索数据#xff1b;本身扩展性很好#xff0c;可以扩展到上百台服务器#xff0c;处理PB级别的数据。es也使用Java开发并使用Lucene…简介
ElasticSearch简介简称为es es是一个开源的高扩展的分布式全文检索引擎它可以近乎实时的存储、检索数据本身扩展性很好可以扩展到上百台服务器处理PB级别的数据。es也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性从而让全文搜索变得简单个开源的分布式搜索引擎可以用来实现搜索日志统计分析系统监控等多种功能。
Elastic StackELK是以Elasticsearch为核心的技术栈其中包括beats。logstashkibanbaElasticsearch。
正向索引和倒排索引
正向索引假设我们有一个商品表id是主键 如果我们按照id查询数据他会走索引查询效率很快但是一般来说我们是会按照title来搜索sql语句如下
select * from good where title like “%手机%”
他查询需要全表扫描一个个去匹配效率可想而知这就是正向索引他在做局部内容检索的时候效率十分底。
倒排索引
文档每条数据就是一个文档类似于数据库中一张表的一条数据
词条就是把文档分成一个个词语
假如同样我们搜索华为手机基于倒排索引他首先会将华为手机进行分词获得文档id之后基于id进行查询文档这时候虽然经过两次检索但是每次都是基于索引的总的来说效率很高。
MySQL和Es的概念对比 Mysql擅长事务类型操作可以确保数据的安全和一致性Elasticsearch擅长海量数据的搜索、分析、计算
安装Elasticsearch和kibana
安装Elasticsearch
我们这里继续使用docker来安装
1创建一个网络因为我们需要让kibana容器和es互联
docker network create es-net
2拉取镜像
docker pull elasticsearch 但是es有差不多一个G拉取速度太慢建议下载制作好的文件上传直接加载成镜像例如上传es.tar将他加载为镜像速度会很快。 如果你直接拉取的镜像这个命令不需要执行
docker load -i es.tar
3运行es容器
docker run -d \--name es \-e ES_JAVA_OPTS-Xms512m -Xmx512m \-e discovery.typesingle-node \-v es-data:/usr/share/elasticsearch/data \-v es-plugins:/usr/share/elasticsearch/plugins \--privileged \--network es-net \-p 9200:9200 \-p 9300:9300 \
elasticsearch:7.12.1
命令解释 -e cluster.namees-docker-cluster设置集群名称 -e http.host0.0.0.0监听的地址可以外网访问 -e ES_JAVA_OPTS-Xms512m -Xmx512m内存大小因为他是基于java开发的 -e discovery.typesingle-node非集群模式 -v es-data:/usr/share/elasticsearch/data挂载逻辑卷绑定es的数据目录 -v es-logs:/usr/share/elasticsearch/logs挂载逻辑卷绑定es的日志目录 -v es-plugins:/usr/share/elasticsearch/plugins挂载逻辑卷绑定es的插件目录 --privileged授予逻辑卷访问权 --network es-net 加入一个名为es-net的网络中 -p 9200:9200端口映射配置
4浏览器输入ip:9200如果出现 安装成功
安装Kibana
kibana可以给我们提供一个elasticsearch的可视化界面便于我们更方便使用es
1拉取镜像
docker pull kibana
这里还是建议上传打包好的镜像将他重新加载成镜像如果直接拉取不需要执行这个命令
docker load -i kibana.tar2启动kibana容器
docker run -d \
--name kibana \
-e ELASTICSEARCH_HOSTShttp://es:9200 \
--networkes-net \
-p 5601:5601 \
kibana:7.12.1
命令解释 --network es-net 加入一个名为es-net的网络中与elasticsearch在同一个网络中 -e ELASTICSEARCH_HOSTShttp://es:9200设置elasticsearch的地址因为kibana已经与elasticsearch在一个网络因此可以用容器名直接访问elasticsearch -p 5601:5601端口映射配置
3浏览器输入ip:5601即可查看-启动较慢稍等一会
安装成功
ES-操作索引库类似MySQL的表
mapping属性
mapping是对索引库中文的约束常见的mapping属性包括
type字段数据类型常见的简单类型有 字符串text可分词文本keyword不可分词例如国家品牌ip等等 数值longintegershortdoublefloat 布尔boolean 日期date 对象object
index是否创建索引默认为true。
analyzer使用那种分词器。
properties子字段对象嵌套时需要。 创建索引库-类似于数据库的表
假如我们数据库有一个用户表其中一条数据如下
{ id: 1, age: 21, weight: 52.1, isMarried: false, info: csdn最靓的崽, email: gdenb.cn, scores: [ 99.1,99.5,98.9], name: { firstName: 蛋儿, lastName: 狗 }
}
不难看出数据库表如何创建的我们来看看在es中如何创建 索引库
这是一个示例
# 创建索引库
PUT /索引库名称
{mappings: {properties: {字段1:{type:类型例如text, analyzer: 使用哪种分词器},字段2:{type: 类型例如keyword,index: false # 不适用索引},字段3:{properties: {子字段1{type:字段类型},子字段2{type:字段类型}}}}}
}实现之后(我们取少量字段) # 创建索引库
PUT /userinfo
{mappings: {properties: {info:{type:text,analyzer: ik_smart},email:{type: keyword,index: false },age:{type: integer,index: false},name:{properties: {dirstName:{type:keyword},lastName:{type:keyword}}}}}
} 注意索引名必须小写
索引库查询
GET /索引库名
索引库删除
DELETE /索引库名
索引库修改
需要注意的是es在索引库创建的时候就会基于索引库创建倒排索引如果修改索引库结构倒排索引就会失效所以es是不允许修改索引库的但是可以在索引库中增加新的字段。
# 向索引库中增加一个字段
PUT /索引库名/_mapping
{properties:{新字段名:{type:字段类型}}
}Es-操作文档
类似MySQL的数据 索引库插入一条文档
示例语句
# 向索引库中插入一条数据
POST /userinfo/_doc/文档id例如12。。。
{字段1:值1,字段2:值2,字段3:{子属性1:值3,子属性2:值4}
}
具体实现
# 向索引库中插入一条数据
POST /userinfo/_doc/1
{info:csdn最靓的崽,email:gdenb.cn,age:20,name:{dirstName:狗,lastName:蛋儿}
}
索引库查询的文档
# 查询id为1的数据
GET /索引库名/_doc/1#查询所有数据
GET /userinfo/_search
{ query: { match_all: {} }
}
索引库删除一条文档
#删除id为1的数据
DELETE /userinfo/_doc/1索引库修改文档
1全量修改
原本插入文档使用的是POST请求这时候只需要换成PUT请求即可它会将原有的文档删除在重新插入例如
# 全量修改 修改索引库中id为1的数据如果不存在就插入
PUT /userinfo/_doc/1
{info:csdn最靓的崽,email:gdenb.cn,age:20,name:{dirstName:狗,lastName:蛋儿}
}
2局部修改 # 局部修改
POST /userinfo/_update/1
{doc: {age:99}
}
至此es基础篇完结