Elasticsearch的安装及常用操作

news2024/9/21 22:26:35

文章目录

  • 一、Elasticsearch的介绍
    • 1、Elasticsearch索引
    • 2、Elasticsearch的介绍
  • 二、Elasticsearch的安装
    • 1、安装ES服务
    • 2、安装kibana
    • 3、Docker安装ES
    • 4、Docker安装Kibana
  • 三、ES的常用操作
    • 1、索引操作
    • 2、文档操作
    • 3、域的属性
      • 3.1 index
      • 3.2 type
      • 3.3 store
  • 总结

一、Elasticsearch的介绍

1、Elasticsearch索引

  1. Elasticsearch是一个全文检索服务器,全文检索是一种非结构化数据的搜索方式。
    结构化数据:指具有固定长度的数据,如数据库中的字段。
    非结构化数据:指格式和长度不固定的数据。
    结构化数据一般存入数据库,使用sql语句即可快速查询。但由于非结构化数据量大且格式不固定,需要采用全文检索的方式进行搜索。全文检索通过建立倒排索引加快搜索效率。
  2. 索引:将数据中的一部分信息提取出来,重新组织成一定的数据结构,可以根据该结构进行快速搜索,这样的结构称之为索引。索引分为正排索引和倒排索引。
    正排索引(正向索引):将文档id建立为索引,通过id可以快速查找数据。如数据库的主键就是创建的正排索引。
    倒排索引(反向索引):非结构化数据中往往会根据关键词查询数据。此时将数据中的关键词建立为索引,指向文档数据,这样的数据称为倒排索引。

2、Elasticsearch的介绍

  1. Elasticsearch是基于Lucene开发的项目;本质是一个Java语言开发的web项目。 可以通过RESTful风格的接口访问该项目内部的Lucene,从而让全文搜索变得简单。ES内部包含了Lucene。
  2. Elasticsearch自身带有分布式协调管理功能;solr利用zookeeper进行分布式管理。
    Elasticsearch仅支持json文件格式;solr支持很多格式的数据。
    Elasticsearch本身更注重于核心功能,高级功能多由第三方插件提供;solr官方提供的功能更多。
    solr在传统的搜索应用中表现好于Elasticsearch,但在处理实时搜索应用时(即边添加边搜索)效率明显低于Elasticsearch。
    目前ES市场占有率越来越高,solr已经停止维护。
  3. 文档(Document):是可被查询的最小数据单元,一个文档就是一条数据。类似于关系型数据库中的记录的概念。
    类型(Type):具有一组共同字段的文档定义成一个类型,类似于关系型数据库中的数据表的概念。
    索引(Index):是多种类型文档的集合,类似于关系型数据库中库的概念。
    域(Field):文档由多个域组成,类似于关系型数据库中的字段的概念。
    ES7.X之后删除了Type的概念,一个索引不会代表一个库,而是代表一张表。
    即原本对应表概念的Type没有了,使用Index代替对应表概念,同时删除了ES中相当于关系型数据库的库的概念。

二、Elasticsearch的安装

1、安装ES服务

  1. 准备一个CentOS7系统的虚拟机,使用MobaX终端连接虚拟机。
  2. 关闭防火墙:systemctl stop firewalld.service
    禁止防火墙自启动:systemctl disable firewalld.service
  3. 配置最大可创建文件数大小
    1)打开系统文件:vim /etc/sysctl.conf
    2)添加一下配置:vm.max_map_count=655360,保存退出
    3)在命令行使配置生效:sysctl -p
  4. 因为ES不能以root用户运行,需要创建一个非root用户es:useradd es
  5. 在官网下载linux的Elasticsearch压缩包:https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.6.1-linux-x86_64.tar.gz
  6. 通过mobax上传到目录/中,然后解压缩:tar -zxvf elasticsearch-8.6.1-linux-x86_64.tar.gz
  7. 重命名ES文件:mv elasticsearch-8.6.1 elasticsearch
  8. 将ES文件移动到目录/usr/local/中:mv elasticsearch /usr/local/
  9. 让es用户取得该文件夹权限:chown -R es:es /usr/local/elasticsearch
  10. 切换为es用户:su es
  11. 找到/usr/local/elasticsearch/config/目录下面的elasticsearch.yml配置文件,把安全认证开关从原先的true都改成false,即可实现免密登录访问
  12. 进入到目录/usr/local/elasticsearch/bin:cd /usr/local/elasticsearch/bin
  13. 启动es服务:./elasticsearch
  14. 新开一个窗口查询es服务是否启动成功:curl 127.0.0.1:9200,此时{}内有数据,即非Empty时证明启动成功

2、安装kibana

  1. 在Elasticsearch官网下载linux版的kibana:https://artifacts.elastic.co/downloads/kibana/kibana-8.6.1-linux-x86_64.tar.gz
  2. 在目录/中上传该压缩包,然后在目录/下解压缩到目录/usr/local/中:tar -zxvf kibana-8.6.1-linux-x86_64.tar.gz -C /usr/local/
  3. 修改配置文件
    1)进入到config目录下:cd /usr/local/kibana-8.6.1/config
    2)修改配置文件:vim kibana.yml
    3)添加kibana主机ip:server.host: "192.168.126.24"
    添加Elasticsearch路径:elasticsearch.hosts: ["http://127.0.0.1:9200"]
  4. 给es用户设置kibana目录权限:chown -R es:es /usr/local/kibana-8.6.1/
  5. 切换到es用户:su es
  6. 进入到kibana的bin目录:cd /usr/local/kibana-8.6.1/bin/
  7. 确保启动Elasticsearch后,再启动kibana:./kibana
  8. 在浏览器中访问kibana:http://192.168.126.24:5601/
    如果google浏览器版本太低的话是访问不到这个页面的
  9. 在kibana页面中选择Management,再选择Index Management,即可查看Elasticsearch索引信息
    在这里插入图片描述

3、Docker安装ES

  1. 安装docker:curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
    重复了2次命令,第一次显示获取密钥失败,第二次才安装成功
  2. 启动docker :systemctl start docker
  3. 拉取ES镜像:docker pull elasticsearch:8.6.1
  4. docker容器间建立通信:docker network create elastic
  5. 创建ES容器:docker run --restart=always -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms512m -Xmx512m" --name='elasticsearch' --net elastic --cpuset-cpus="1" -m 1G -d elasticsearch:8.6.1
    参数:
    -p:第一个-p是外部访问时的端口号,第二个-p是ES集群内部通信的端口号
    -e:第一个-e是指ES是单节点的,第二个-e是指该ES在JAVA中占用的内存为固定内存512M
    –name:指该容量的名字
    –net:指使用的网关
    –cpuset-cpus:指使用多少个cpu
    -m:占用的内存
    -d:指被使用的镜像名字
  6. 修改配置文件(设置免密码登录)
    1)将ES容器中的elasticsearch.yml拷贝到当前目录下:docker cp elasticsearch:/usr/share/elasticsearch/config/elasticsearch.yml .
    因为相对路径显示找不到文件,此时用的是绝对路径
    2)修改yml文件:vim elasticsearch.yml,将所有的true改为false即可
    3)将修改后的配置文件拷贝回容器中:docker cp elasticsearch.yml elasticsearch:/usr/share/elasticsearch/config/elasticsearch.yml
    4)重启elasticsearch容器:docker restart elasticsearch

4、Docker安装Kibana

  1. 拉取kibana镜像:docker pull kibana:8.6.1
  2. 启动容器:docker run --name kibana --net elastic --link elasticsearch:elasticsearch -p 5601:5601 -d kibana:8.6.1
  3. 在浏览器中访问kibana:192.168.126.24:5601

三、ES的常用操作

1、索引操作

Elasticsearch是使用RESTful风格的http请求访问操作的,请求参数和返回值都是json格式,可以使用kibana发送http请求操作ES。
1)选择Management下的DevTools,即可通过kibana来操作ES
在这里插入图片描述

2)在IndexManagement中查看索引
在这里插入图片描述

  1. 创建索引,在kibana中输入下面内容并运行,即可创建student索引

    PUT /student
    {
      "mappings": {
        "properties": {
          "id": {
            "type": "integer"
          },
          "name": {
            "type": "text"
          },
          "age": {
            "type": "integer"
          }
        }
      }
    }
    
    

    即创建student索引并添加索引的结构

  2. 删除索引,在kibana中输入下面内容并运行,即可删除student索引

    DELETE /student
    

2、文档操作

  1. 新增或修改文档

    POST /student/_doc/1
    {
      "id":1,
      "name":"zzx",
      "age":10
      
    }
    

    此时文档id设置为1,如果不写id则自动生成文档id,id和已有id重复时修改文档

  2. 根据文档id查询文档

    GET /student/_doc/1
    
  3. 根据id删除文档

    DELETE /student/_doc/1
    
  4. 根据id批量查询文档

    GET /student/_mget
    {
      "docs":[
        {"_id":1},
        {"_id":2}
        ]
    }
    
  5. 查询所有文档

    GET /student/_search
    {
      "query":{
        "match_all":{}
      }
    }
    
  6. 修改文档

    POST /student/_doc/1
    {
      "id": 3,
      "name": "zzx",
      "age": 10
    }
    
    

    Elasticsearch执行删除操作时,ES先标记文档为deleted状态,而不是直接物理删除。当ES存储空间不足或者工作空闲时,才会执行物理删除。
    Elasticsearch执行修改操作时,ES不会真的修改Document中的数据,而是标记ES中原有的文档为deleted状态,再创建一个新的文档来存储数据。

3、域的属性

3.1 index

只有域中的index的值为true时,才能根据该域的关键词查询文档。

  1. 创建两个索引,其中一个索引的域中的index值为true,另一个为false。

    PUT /student1
    {
      "mappings": {
        "properties": {
          "name": {
            "type": "text",
            "index":true
          }
        }
      }
    }
    PUT /student2
    {
      "mappings": {
        "properties": {
          "name": {
            "type": "text",
            "index":false
          }
        }
      }
    }
    
  2. 创建2个域的值相同的文档

    POST /student1/_doc/1
    {
      "name":"zzx 111"
    }
    POST /student2/_doc/1
    {
      "name":"zzx 111"
    }
    
  3. 在这两个文档中,都按name域查找

    GET /student1/_search
    {
      "query":{
        "term":{
          "name": "zzx"
        }
      }
    }
    GET /student2/_search
    {
      "query":{
        "term":{
          "name": "zzx"
        }
      }
    }
    

    此时student1的name域的index为true,能找到,但是student2是false,直接报错。并且按域查找时,text类型是以空格符为分割符,即如果是zz的话,也是找不到。

3.2 type

  1. 字符串类型:text
  2. 整数类型:long,integer,short,byte
  3. 浮点型:double,float
  4. 日期类型:date
  5. 布尔类型:boolean
  6. 数组类型:array
  7. 对象类型:object
  8. 不分词的字符串:keyword
    1)创建一个student3
	PUT /student3
	{
	  "mappings": {
	    "properties": {
	      "name": {
	        "type": "keyword",
	        "index":true
	      }
	    }
	  }
	}

2)进行查询

	GET /student3/_search
	{
	  "query":{
	    "term":{
	      "name": "zzx"
	    }
	  }
	}
	

此时因为keyword类型是不分词的,所以找不到

3.3 store

域中store的值为true,则为单独存储,即该域能够单独查询。

  1. 创建2个索引

    PUT /student1
    {
      "mappings": {
        "properties": {
          "age": {
            "type":"integer"
          },
          "name": {
            "type": "text",
            "index":true,
            "store": true
          }
        }
      }
    }
    PUT /student2
    {
      "mappings": {
        "properties": {
          "age": {
            "type":"integer"
          },
          "name": {
            "type": "text",
            "index":true,
            "store": false
          }
        }
      }
    }
    
  2. 给俩个索引赋值

    POST /student1/_doc/1
    {
      "age":11,
      "name":"zzx 111"
    }
    POST /student2/_doc/1
    {
      "age":11,
      "name":"zzx 111"
    }
    
  3. 分别按域单独查找

    GET /student1/_search
    {
      "stored_fields":["name"]
    }
    GET /student2/_search
    {
      "stored_fields":["name"]
    }
    

    其中student1的store值为true,student2为false,索引student1单独查找时能找到域值,而索引student2单独查找时没有找到域值。

总结

  1. Elasticsearch是一个全文检索服务器,全文检索是一种非结构化数据的搜索方式。
    全文检索通过建立倒排索引加快搜索效率。
    docker安装ES及Kibana,拉取ES镜像后,创建ES通信用的网关,创建ES容器,将配置文件修改为免密码登录即可;拉取Kibana镜像后,创建Kibana容器后即可通过Kibana访问ES服务。
    在使用docker的cp指令时,遇到一个问题,就是不能通过相对路径找到文件,而是用绝对路径才能找到文件。
  2. ES在执行删除和修改操作时,不会马上删除,而是先标记为deleted状态,在内存不足或工作空闲时,才会执行物理删除操作。
  3. index为true时,在查询文档时,可以根据域值查找文档。
    store为true时,将该域进行单独存储,可以按域名单独查询到。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/357736.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于云计算,我们问了ChatGPT 10个问题

ChatGPT懂云计算吗?前些天,我们问了ChatGPT(非Plus收费版)一些问题。1. 什么是云计算?2. 云计算行业的护城河是什么?3. 什么是云原生?4. 微软Azure与亚马逊AWS的主要区别是什么?5. 为…

你真的会做APP UI自动化测试吗?我敢打赌百分之九十的人都不知道这个思路

目录 前言 一,开发语言选择 二,UI测试框架选择 1,Appium 2,Airtest 3,选择框架 三,单元测试框架选择 四,测试环境搭建 1,测试电脑选择 2,测试手机选择 3&#…

6.关于系统服务的思考—— native vs java

文章目录native服务 以sensor service为例Native 服务java 服务, 以vibrate为例java 服务 以一个demo为例native服务 以sensor service为例 service启动 SystemServer.startBootstrapServices---->>>mSystemServiceManager.startService—>>>Sen…

SQL语句创建视图:

前言 🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻推荐专栏: 🍔🍟🌯 c语言初阶 🔑个人信条: 🌵知行合一 🍉本篇简介:>:介绍数据库中有关视图的知识,参考学校作业. 金句分享:…

基于SpringBoot的在线文档管理系统

文末获取源码 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7/8.0 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9 浏…

进程-操作系统结构

进程-操作系统结构 中文仅本人理解,有错误请联系我。 操作系统为不同方面服务,有不同的设计角度。 为用户: 使用 为程序员:创造 程序员需要关注的就是system call接口的调度 file systems:ntfs,ext4 commu…

eclipse快捷开发学习笔记

快速收起java类中的所有代码当类中方法过多时,收起所有方法,可以方便查看注释找到方法右击左侧栏任意行号位置-点击Folding-点击Collapse All效果图如下代码格式化混乱的代码格式化后,方便阅读分析菜单栏-Source-Format效果如下3.查看方法被哪…

Bland-Altman图

介绍 Bland-Altman图是一种一致性评价测量方法,简称BA,常用于医学实验和数据分析。 可使用它检测两组数据的一致性,比如对比新旧两种方法,对比一组实际值和预测值等。相对于校准曲线,它能更好地对比两组数据中每个数据…

Unit Test and Integration Test

Unit Test and Integration Test Background It is the first time that I try to write an article in English. In the past, I didn’t write test code. Just thinking QA is responsible for testing. As a developer, I don’t need to care about tests. Although I …

Robust Self-Augmentation for Named Entity Recognition with Meta Reweighting

摘要 近年来,自我增强成为在低资源场景下提升命名实体识别性能的研究热点。Token substitution and mixup (token替换和表征混合)是两种有效提升NER性能的自增强方法。明显,自增强方法得到的增强数据可能由潜在的噪声。先前的研究…

【Vue3源码】第四章 实现isReadonly和isReactive

【Vue3源码】第四章 实现isReadonly和isReactive 前言 上一章节我们实现readonly API,并且优化之前写的reactive API。这一章我们实现isReadonly和isReactive两个API。 1、实现isReactive 官网是这么介绍的:检查一个对象是否是由 reactive() 或 shallo…

WebView2 (Chromium) 右键菜单大全

在开发WebView2浏览器时,需要定制右键上下文菜单,但是微软的官方网站上没有详细的菜单,这里整理出来,以方便大家使用。以下是在win11上测试获取的,经过测试win7上稍有不同。一、网页上空白处右键 Target:Pa…

Mybatis Notes

文章目录1 Mybatis 介绍1.1 快速入门2 JDBC2.1 JDBC介绍2.3 JDBC问题分析2.4 Mybatis与JDBC技术对比3 数据库连接池3.1 数据库连接池介绍3.2 数据库连接池产品产品3.3 Druid引入项目4lombok4.1 lombok介绍4.2 lombok使用4.2.1 在pom.xml文件中引入依赖4.2.2 pojo类代码引入1 My…

强化学习 Reinforcement Learning(1) ~ 介绍

1. 强化学习概念和分类 强化学习,Reinforcement Learning 通过价值选行为: Q LearningSarsaDeep Q Network 直接选行为: Policy Gradients 想象环境并从众学习: Model Based RL 1.1 通过环境分类 1.1.1 不理解环境 Model-Fr…

4.5 习题(王晓云 主编)

一、选择题1. 下面( ) 是错误的if 语句&#xff08;设int x,a,b;&#xff09;BA&#xff09;if (ab) x; B&#xff09;if (a<b) x;C&#xff09;if (a-b) x; D&#xff09;if (x ) x;2. 以下程序片段( )。Dvoid main ( ){int x0,y0,z0;if (xyz) printf(“***”);else printf…

RT-Thread SP使用教程

RT-Thread SPI 使用教程 实验环境使用的是正点原子的潘多拉开发板。 SPI从机设备使用的是BMP280温湿度大气压传感器。 使用RT-Thread Studio搭建基础功能。 1. 创建工程 使用RT-Thread Studio IDE创建芯片级的工程。创建完成后&#xff0c;可以直接编译下载进行测试。 2.…

JVM学习篇垃圾收集器ParNewCMS与底层三色标记算法详解

1. 垃圾收集算法 2. 分代收集理论 当前虚拟机的垃圾收集都采用分代收集算法&#xff0c;这种算法没有什么新的思想&#xff0c;只是根据对象存活周期的不同将内存分为几块。一般将java堆分为新生代和老年代&#xff0c;这样我们就可以根据各个年代的特点选择合适的垃圾收集算法…

因果推断7--深度因果模型综述(个人笔记)

目录 0摘要 1介绍 2预习 3治疗和指标 4深层因果模型的发展 4.1发展时间表 4.2模型分类 5典型的深层因果模型 6实验指南 6.1数据集 6.2code 6.3实验 7结论 参考 编码 1.自编码器(AE)&#xff1a; 2.去噪自编码器(DAE) 3.变分自编码器VAE 4.去耦变分自编码 文章…

复旦MBA父女“接力”,圆梦复旦|校友故事

父亲&#xff1a;钱一&#xff0c;2006级复旦MBA校友      女儿&#xff1a;钱盈&#xff0c;2017级财务管理本科&#xff0c;金融硕二年级在读      在管院的众多校友中&#xff0c;有这样一对父女&#xff1a;2006年&#xff0c;父亲钱一考上了复旦MBA&#xff0c;每…

node基于springboot 口腔卫生防护口腔牙科诊所管理系统

目录 1 绪论 1 1.1课题背景 1 1.2课题研究现状 1 1.3初步设计方法与实施方案 2 1.4本文研究内容 2 2 系统开发环境 4 2.1 JAVA简介 4 2.2MyEclipse环境配置 4 2.3 B/S结构简介 4 2.4MySQL数据库 5 2.5 SPRINGBOOT框架 5 3 系统分析 6 3.1系统可行性分析 6 3.1.1经济可行性 6 3.…