ElasticSearch入门

什么是ElasticSearch?

ES是一个开源式分布式搜索引擎,可以用来实现搜索、日志统计、分析、系统监控,ES易于扩展可以轻松扩展到上百台服务器。处理PB(1PB = 1024TB, 1TB = 1024GB)级别的数据。ES自身携带分布式协调管理功能但仅支持json文件格式。

1.安装ElasticSearch

docker pull Elasticsearch:7.6.2

2.创建es网络

docker network create es-network

3.在usr文件下创建文件

mkdir elasticsearch
cd elasticsearch/
mkdir data
mkdir plugins

4.修改挂载文件权限

 chmod -R 777 elasticsearch/

 5.创建容器

docker run -d \
--name elasticsearch \
--net=es-network \
-p 9200:9200 \
-p 9300:9300 \
-e "discovery.type=single-node" \
-e xpack.security.authc.api_key.enabled=true \
-e "ES_JAVA_OPTS=-Xms50m -Xmx512m" \
-v es-data:/usr/elasticsearch/data \
-v es-plugins:/usr/elasticsearch/plugins \
docker.elastic.co/elasticsearch/elasticsearch:7.12.1

如果运行不了是否有多余的空格 

解释: 

docker run -d \   //后台运行
--name elasticsearch \   //给容器起别名
--net=es-network \       //制定容器连接到名为es-network的网络上
-p 9200:9200 \           //9200主机和容器的端口映射,9200用于程序调用使用
-p 9300:9300 \           //9300主机和容器的端口映射,9300用于es集群之间的通讯
-e "discovery.type=single-node" \   //配置单节点启动发现的环境变量
-e xpack.security.authc.api_key.enabled=true  \  //启动api秘钥认证功能
-e "ES_JAVA_OPTS=-Xms50m -Xmx512m" \       //制定java虚拟机最小堆内存是50最大堆内存是500m
-v es-data:/usr/elasticsearch/data \        //挂载数据目录卷
-v es-plugins:/usr/elasticsearch/plugins \  //挂载插件目录卷
docker.elastic.co/elasticsearch/elasticsearch:7.12.1    //制定运行的镜像:版本

6.校验是否安装成功

curl http://localhost:9200

7.设置访问密码

        1.进入容器

        

docker exec -it 221 /bin/bash

        2.到达usr/share/elasticsearch/config

        3.编辑elasticsearch.yml文件

vim elasticsearch.yml

        4.修改配置文件在最后面加入如下:

http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: Authorization
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true

8.退出容器 ctrl + p + q

9.重启es容器

docket restart es

10.再次进入es容器会输入十二次密码都是一样的密码

./bin/elasticsearch-setup-passwords interactive

11.退出容器 ,并且重启

安装kibana

1.拉取镜像

docker pull kibana:7.12.1

2.创建kibana网络

docker network create kibana-network

3.运行kibana

docker run -d \
--name kibana \
--net=kibana-network \
-e ELASTICSEARCH_HOSTS=http://服务器ip地址:9200 \
-p 5601:5601 \
docker.elastic.co/kibana/kibana:7.12.1

4.进入常见的kabana容器

docker exec -it c1e /bin/bash

5.修改文件

找到/usr/share/kibana/config文件下的kibana.yml

编辑文件在

vi kibana.yml

 在后面加入 密码是elasticsearch输入好几次的密码

i18n.locale: "zh-CN"
elasticsearch.username: "elastic"
elasticsearch.password: "密码"

6.退出并且重启容器

7.访问  服务器名:5601 

用户名就是elastic 

理论

       1.索引:在es中一个索引对应一组相关文档的存储单元,可以被看作是一种类似于数据库中的表结构用于存储相类似的文档,每个文档都属于一个索引,索引中的文档用来被搜索的分析。

        2.索引分片:是将一个完整的索引分成多的过程每个分片是一个独立的索引,拥有自己的设置、映射、文档。ES通过将索引划分为多个分片来允许大规模数据存储,并且能够水平扩展,每个分片可以分布在集群的不同节点上,默认情况下每个索引包含五个主分片。

        3.索引副本:索引副本说每个分片的一个辅助品,用于提供冗余和故障的恢复。副本分布在不同的节点上。从而增加的系统的可靠性和容错能力。

ElasticSearch核心概念

        1.节点 

                节点是集群中的单个服务器,用于存储数据并参与集群的索引和搜索功能。每个节点都有自己的名称和唯一标识符。

        2.集群

                集群是由一个或多个节点组成的一组服务器,它们共同存储项目的整个数据,集群提供了高可用性和横向扩展性。

        3.分片和复制

                分片是将索引中的数据分割成多个部分,用于提高性能和扩展性,每个分片可以被存储在集群中的一个或多个节点上。

                复制是为了数据的高可用性和容错性,每个分片都会有一个或多个副本分片,这些分片

会被存储在不同的节点上。

        4.索引

                索引是用于存储数据的地方,类似于关系型数据库中的数据库,他是一种用于存储相似性质的文档的数据结构。

        5.类型

                类型在ES6.0之前用于组织索引内部文档的一种方式,在ES7.0版本之后已经被废弃,推荐使用单一索引多字段代替。

        6.文档

                文档是ES中的基本数据单元,类似于关系型数据库中的(也就是一条数据),每个文档都是一个JSON对象,它们被存储在索引中并可以被搜索。

        7.字段

                字段是ES中文档的组成部分,类似于关系型数据库中的,每个字段都有自己的数据类型(比如文本型、数值型等),并且包含特定的数据。

        8.映射

                映射定义了索引中的每个字段的数据类型和属性,它相当于关系型数据库中的模式,告诉ES如何处理索引的每个字段。

           

创建索引

PUT /my_es //索引名(相当于数据库名)
{
  "settings": {
    "number_of_shards": 2,   //主分片
    "number_of_replicas": 2  //副分片
  }, 
  "mappings": {
    "properties": {
      "title":{"type":"text" //设置类型},//属性
      "content":{"type": "text"},
      "author":{"type": "text"},
      "time":{"type": "date"}
    }
  }
}

添加文档

POST /my_es/_doc
{
  "title":"",
  "content":"",
  "author":"",
  "time":"2023-12-18T11:44:09"
}

语法规则:  

        _doc:用于早期的ES版本中,同一个索引中单独集合映射类型从8.x版本开始已全面废弃。

        _index:创建新索引。index索引是创建一个命名空间,将相关文档聚合在一起。

        _creat:创建新索引。creat是创建一个新的文档并将其添加到指定索引中。

        _update:更新文档中的一部分内容

        _delete:删除一条数据

查询所有

GET /my_es/_search

单个条件查询

GET /taobao_goods/_search
{
  "query": {
      "match": {
        "name": "康师傅"
    }
  }
}
{
  "took" : 3,  //操作花费的ms秒数(请求耗时)
  "timed_out" : false,//是否超时
  "_shards" : { //分片信息(包含了成功的分片数量和失败的分片数量)
    "total" : 2,//总分片数(总命中数)
    "successful" : 2,//搜索成功的分片数
    "skipped" : 0,//没有搜索或跳过的分片数
    "failed" : 0//搜索失败的分片数
  },
  "hits" : {//搜索结果集
    "total" : {//返回多少数据
      "value" : 1,//一共一条数据
      "relation" : "eq"//过滤语法
    },
    "max_score" : 2.0242352,//最高匹配得分
    "hits" : [
      {
        "_index" : "taobao_goods",//索引名
        "_type" : "_doc",//文档类型(8.0已弃用)
        "_id" : "jtfjgIwBkqagqa3l6e7d",//唯一标识符
        "_score" : 2.0242352,//匹配度得分
        "_source" : {//实际内容
          "id" : "1",
          "name" : "康师傅红烧牛肉面",
          "descrption" : "好吃的红烧牛肉面巴适得板",
          "price" : "4",
          "stock" : "100"
        }
      }
    ]
  }
}

 多条件查询

GET /taobao_goods/_search
{
  "query": {
    "bool": {//多条件查询的一种方式
      "must": [ //必须满足一下条件相当于sql中的and
        {"match": {"name": "康师傅"}},
        {"match": {"descrption": "红"}}
      ]
    }
  }
}

1.must:必须都匹配相当于逻辑的and 

2.must_not:表示条件必须都不匹配相当于逻辑中的not

3.should:表示条件可以匹配,但不是必须。相当于逻辑上的or

4.filter:条件必须匹配,常用于过滤操作。

更新索引

_doc:如果是doc的操作是覆盖方式完成更新。(8.0之后移除)

POST /taobao_goods/_doc/jtfjgIwBkqagqa3l6e7d
{
  "id":"1",
  "name":"康师傅红烧牛肉面",
  "descrption":"好吃的红烧牛肉面巴适得板",
  "price":"4",
  "stock":"100"
}
//这种写法会重写原有数据结构(慎用) 

_update:非覆盖方式更新只有修改功能

POST /taobao_goods/_update/jtfjgIwBkqagqa3l6e7d
{
  "doc": {
    "price":"20"
  }
}
//只会修改对应字段
//如果没有字段就会添加上一个字段

删除文档

根据ES id删除

DELETE /taobao_goods/_doc/jtfjgIwBkqagqa3l6e7d

根据数据id删除

POST /taobao_goods/_delete_by_query
{
  "query":{
    "match":{"id":"2"}
  }
}



//删除所有(慎用)
POST /taobao_goods/_delete_by_query
{
  "query":{
    "match_all":{}
  }
}

  • 31
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值