ElasticSearch入门篇

简介

**ElasticSearch简介:**简称为es, es是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。es也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单个开源的分布式搜索引擎,可以用来实现搜索,日志统计,分析,系统监控等多种功能。

Elastic Stack(ELK): 是以Elasticsearch为核心的技术栈,其中包括beats。logstash,kibanba,Elasticsearch。

正向索引和倒排索引

正向索引,假设我们有一个商品表,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.type=single-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.name=es-docker-cluster":设置集群名称

  • -e "http.host=0.0.0.0":监听的地址,可以外网访问

  • -e "ES_JAVA_OPTS=-Xms512m -Xmx512m":内存大小,因为他是基于java开发的

  • -e "discovery.type=single-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.tar

2,启动kibana容器

docker run -d \
--name kibana \
-e ELASTICSEARCH_HOSTS=http://es:9200 \
--network=es-net \
-p 5601:5601  \
kibana:7.12.1

命令解释:

  • --network es-net :加入一个名为es-net的网络中,与elasticsearch在同一个网络中

  • -e ELASTICSEARCH_HOSTS=http://es:9200":设置elasticsearch的地址,因为kibana已经与elasticsearch在一个网络,因此可以用容器名直接访问elasticsearch

  • -p 5601:5601:端口映射配置

3,浏览器输入ip:5601即可查看-(启动较慢,稍等一会)

安装成功!!!

ES-操作索引库(类似MySQL的表)

mapping属性

mapping是对索引库中文的约束,常见的mapping属性包括:

type:字段数据类型,常见的简单类型有:

字符串:text(可分词文本),keyword(不可分词,例如国家,品牌,ip等等)

数值:long,integer,short,double,float

布尔:boolean

日期:date

对象:object

index:是否创建索引,默认为true。

analyzer:使用那种分词器。

properties:子字段,对象嵌套时需要。

创建索引库-类似于数据库的表

假如我们数据库有一个用户表,其中一条数据如下:

{  
  "id": 1,  
  "age": 21,  
  "weight": 52.1,  
  "isMarried": false,  
  "info": "csdn最靓的崽!!",  
  "email": "gde@nb.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,例如1,2。。。
{
  "字段1":"值1",
  "字段2":"值2",
  "字段3":{
    "子属性1":"值3",
    "子属性2":"值4"
  }
}

具体实现:

# 向索引库中插入一条数据
POST /userinfo/_doc/1
{
  "info":"csdn最靓的崽!!",
  "email":"gde@nb.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":"gde@nb.cn",
  "age":"20",
  "name":{
    "dirstName":"狗",
    "lastName":"蛋儿"
  }
}

2,局部修改

# 局部修改
POST /userinfo/_update/1
{
  "doc": {
    "age":"99"
  }
}

至此es基础篇完结!!!!!!

相关推荐
kkivivu5 分钟前
家庭用超声波清洗机好用吗?推荐四款性能绝佳的超声波清洗机!
大数据
大G哥29 分钟前
ELK日志收集之ES的DSL查询语句
大数据·elk·elasticsearch·搜索引擎·jenkins
不能放弃治疗43 分钟前
重生之我们在ES顶端相遇第 20 章 - Mapping 参数设置大全(进阶)
elasticsearch
青云交1 小时前
大数据新视界 --大数据大厂之数据质量评估指标与方法:提升数据可信度
大数据·sql·一致性·完整性·数据质量评估·数据可信度·准确性·时效性
黄焖鸡能干四碗1 小时前
【需求分析】软件系统需求设计报告,需求分析报告,需求总结报告(原件PPT)
大数据·人工智能·安全·测试用例·需求分析
YONG823_API3 小时前
电商平台数据批量获取自动抓取的实现方法分享(API)
java·大数据·开发语言·数据库·爬虫·网络爬虫
Data 3176 小时前
Hive数仓操作(十)
大数据·数据库·数据仓库·hive·hadoop
ON.LIN6 小时前
Hadoop大数据入门——Hive-SQL语法大全
大数据·数据库·hive·hadoop·分布式·sql
Elastic 中国社区官方博客6 小时前
Elasticsearch 开放推理 API 增加了对 Google AI Studio 的支持
大数据·数据库·人工智能·elasticsearch·搜索引擎
cndes6 小时前
大数据算法的思维
大数据·算法·支持向量机