elastic 概述

news2025/8/8 2:30:31

引言

1.1 海量数据

在海量数据中执行搜索功能时,如果使用MySQL,效率太低。

1.2 全文检索

在海量数据中执行搜索功能时,如果使用MySQL,效率太低。

1.3 高亮显示

将搜索关键字,以红色的字体展示。

ES概述   ES 也是一个nosql

ES的介绍

  • ES是一个使用Java语言并且基于Lucene编写的搜索引擎框架,他提供了分布式的全文搜索功能,提供了一个统一的基于RESTful风格的WEB接口,官方客户端也对多种语言都提供了相应的API。

  • Lucene:Lucene本身就是一个搜索引擎的底层。

  • 分布式:ES主要是为了突出他的横向扩展能力。

  • 全文检索:将一段词语进行分词,并且将分出的单个词语统一的放到一个分词库中,在搜索时,根据关键字去分词库中检索,找到匹配的内容。(倒排索引)

  • RESTful风格的WEB接口:操作ES很简单,只需要发送一个HTTP请求,并且根据请求方式的不同,携带参数的同,执行相应的功能。

  • 应用广泛:Github.com,WIKI,Gold Man用ES每天维护将近10TB的数据。

ES和Solr

  • Solr在查询死数据时,速度相对ES更快一些。但是数据如果是实时改变的,Solr的查询速度会降低很多,ES的查询的效率基本没有变化。

  • Solr搭建基于需要依赖Zookeeper来帮助管理。ES本身就支持集群的搭建,不需要第三方的介入。

  • 最开始Solr的社区可以说是非常火爆,针对国内的文档并不是很多。在ES出现之后,ES的社区火爆程度直线上升,ES的文档非常健全。

  • ES对现在云计算和大数据支持的特别好。

倒排索引

将存放的数据,以一定的方式进行分词,并且将分词的内容存放到一个单独的分词库中。

当用户去查询数据时,会将用户的查询关键字进行分词。

然后去分词库中匹配内容,最终得到数据的id标识。

根据id标识去存放数据的位置拉取到指定的数据。

 

ElasticSearch安装

usr/local/docker/es 目录下   vim docker-compose.yml文件   kibana es的图形化管理工具 ip改为自己的ip

version: "3.1"
services:
  elasticsearch:
    image: daocloud.io/library/elasticsearch:6.5.4
    restart: always
    container_name: elasticsearch
    ports:
      - 9200:9200
  kibana:
    image: daocloud.io/library/kibana:6.5.4
    restart: always
    container_name: kibana
    ports:
      - 5601:5601
    environment:
      - elasticsearch_url=http://192.168.199.109:9200
    depends_on:
      - elasticsearch

安装IK分词器

  • 下载IK分词器的地址:https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.5.4/elasticsearch-analysis-ik-6.5.4.zip

  • 由于网络问题,采用国内的路径去下载:http://tomcat01.qfjava.cn:81/elasticsearch-analysis-ik-6.5.4.zip

  • 进去到ES容器内部,跳转到bin目录下,执行bin目录下的脚本文件:

  • ./elasticsearch-plugin install http://tomcat01.qfjava.cn:81/elasticsearch-analysis-ik-6.5.4.zip

  • 重启ES的容器,让IK分词器生效。

如果以上方法执行不了,可以采用本地离线方法

注意:如果进入el容器闪退,要增加虚拟内存  

去这编辑这个文件   vim /etc/sysctl.conf 

设置 vm的虚拟内存大小  vm.max_map_count=262144 

查看设置完成的内存状态  sysctl -p

 

 

分词器离线安装

进入es容器内部,找到plugins目录,创建一个ik目录,进入ik,pwd找见当前地址

退出容器,docker cp ik 分词器 容器id:刚pwd地址

进去容器目录 unzip ik分词器解压

退出容器重启es就好了

 

 

 

安装好之后  访问9200 有了页面就好了  安装ik分词器为了支持中文分词 

以下是案例    analyze 分析

 

ElasticSearch基本操作

ES的结构

1.索引Index,分片和备份   相当于mysql的数据库

  • ES的服务中,可以创建多个索引。

  • 解释:索引 index  索引相当于数据库,可以创建多个数据库

  • 每一个索引默认被分成5片存储。

  • 解释:每个数据库分成五片存储

  • 每一个分片都会存在至少一个备份分片。

  • 解释:每一分片至少一个备份分片

  • 备份分片默认不会帮助检索数据,当ES检索压力特别大的时候,备份分片才会帮助检索数据。

  • 备份的分片必须放在不同的服务器中。

 

 

 

2.类型 Type  相当于数据库的表

一个索引下,可以创建多个类型。 Ps:根据版本不同,类型的创建也不同。

 

3.文档 Doc  相当于数据库的一行

一个类型下,可以有多个文档。这个文档就类似于MySQL表中的一行数据。 多个文档多行数据

 

 

4. 属性 Field  相当于mysql的列

一个文档中,可以包含多个属性。类似于MySQL表中的一行数据存在多个列。

 

操作ES的RESTful语法

  • GET请求:

    • http://ip:port/index:查询索引信息

    • http://ip:port/index/type/doc_id:查询指定的文档信息

  • POST请求:

    • http://ip:port/index/type/_search:查询文档,可以在请求体中添加json字符串来代表查询条件

    • http://ip:port/index/type/doc_id/_update:修改文档,在请求体中指定json字符串代表修改的具体信息

  • PUT请求:

    • http://ip:port/index:创建一个索引,需要在请求体中指定索引的信息,类型,结构

    • http://ip:port/index/type/_mappings:代表创建索引时,指定索引文档存储的属性的信息

  • DELETE请求:

    • http://ip:port/index:删除索引

    • http://ip:port/index/type/doc_id:删除指定的文档

 

索引的操作

创建一个索引

PUT /person
{
  "settings": {
    "number_of_shards": 5,
    "number_of_replicas": 1
  }
}

查看索引信息

GET /person

删除索引

DELETE /person

 

ES中Field可以指定的类型

  • 字符串类型:

    • text:一把被用于全文检索。 将当前Field进行分词。

    • keyword:当前Field不会被分词。

  • 数值类型:

    • long:取值范围为-9223372036854774808~922337203685477480(-2的63次方到2的63次方-1),占用8个字节

    • integer:取值范围为-2147483648~2147483647(-2的31次方到2的31次方-1),占用4个字节

    • short:取值范围为-32768~32767(-2的15次方到2的15次方-1),占用2个字节

    • byte:取值范围为-128~127(-2的7次方到2的7次方-1),占用1个字节

    • double:1.797693e+308~ 4.9000000e-324 (e+308表示是乘以10的308次方,e-324表示乘以10的负324次方)占用8个字节

    • float:3.402823e+38 ~ 1.401298e-45(e+38表示是乘以10的38次方,e-45表示乘以10的负45次方),占用4个字节

    • half_float:精度比float小一半。

    • scaled_float:根据一个long和scaled来表达一个浮点型,long-345,scaled-100 -> 3.45

  • 时间类型:

    • date类型,针对时间类型指定具体的格式

  • 布尔类型:

    • boolean类型,表达true和false

  • 二进制类型:

    • binary类型暂时支持Base64 encode string

  • 范围类型:

    • long_range:赋值时,无需指定具体的内容,只需要存储一个范围即可,指定gt,lt,gte,lte

    • integer_range:同上

    • double_range:同上

    • float_range:同上

    • date_range:同上

    • ip_range:同上

  • 经纬度类型:

    • geo_point:用来存储经纬度的

  • ip类型:

    • ip:可以存储IPV4或者IPV6

其他的数据类型参考官网:Field datatypes | Elasticsearch Guide [6.5] | Elastic

创建索引并指定数据结构

# 创建索引,指定数据结构
PUT /book
{
  "settings": {
    # 分片数
    "number_of_shards": 5,
    # 备份数
    "number_of_replicas": 1
  },
  # 指定数据结构
  "mappings": {
    # 类型 Type
    "novel": {
      # 文档存储的Field
      "properties": {
        # Field属性名
        "name": {
    		# 类型
          "type": "text",
    		# 指定分词器
          "analyzer": "ik_max_word",
    		# 指定当前Field可以被作为查询的条件
          "index": true ,
    		# 是否需要额外存储
          "store": false 
        },
        "author": {
          "type": "keyword"
        },
        "count": {
          "type": "long"
        },
        "on-sale": {
          "type": "date",
           # 时间类型的格式化方式 
          "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
        },
        "descr": {
          "type": "text",
          "analyzer": "ik_max_word"
        }
      }
    }
  }
}

 

文档的操作

文档在ES服务中的唯一标识,_index_type_id三个内容为组合,锁定一个文档,操作是添加还是修改。

 

 

新建文档

自动生成_id

# 添加文档,自动生成id
POST /book/novel
{
  "name": "盘龙",
  "author": "我吃西红柿",
  "count": 100000,
  "on-sale": "2000-01-01",
  "descr": "山重水复疑无路,柳暗花明又一村"
}

手动指定_id

# 添加文档,手动指定id
PUT /book/novel/1
{
  "name": "红楼梦",
  "author": "曹雪芹",
  "count": 10000000,
  "on-sale": "1985-01-01",
  "descr": "一个是阆苑仙葩,一个是美玉无瑕"
}

修改文档

覆盖式修改

# 添加文档,手动指定id
PUT /book/novel/1
{
  "name": "红楼梦",
  "author": "曹雪芹",
  "count": 4353453,
  "on-sale": "1985-01-01",
  "descr": "一个是阆苑仙葩,一个是美玉无瑕"
}

doc修改方式

# 修改文档,基于doc方式
POST /book/novel/1/_update
{
  "doc": {
     # 指定上需要修改的field和对应的值
    "count": "1234565"
  }
}

删除文档

根据id删除

# 根据id删除文档
DELETE /book/novel/_id

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

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

相关文章

加锁和解锁-ReentrantLock详解-AQS-并发编程(Java)

文章目录1 AQS1.1 概念1.2 两种锁机制1.3 公平锁和非公平锁1.3 锁竞争1.4 条件变量2 ReentrantLock2.1 简介2 加锁2.1 加锁成功2.2 加锁失败2.2.1 tryAcquire()2.2.2 addWaiter()2.2.3 acquireQueued()2.2.3.1 主方法2.2.3.2 shouldParkAfterFailedAcquire()2.2.3.3 parkAndChe…

LeetCode 84.柱状图中最大的矩形

今天还是分享一道才刷过的题目, 柱状图中最大的矩形,这道题根上一篇我分享的接雨水类似,都是可以用双指针,动态规划(双指针加备忘录),单调栈来算 这道题的话三种方法都写了,双指针会超时,优化一…

pdf生成:puppeteer

一、Puppeteer Puppeteer是Google Chrome团队出品的一款无界面Chrome工具,它提供了丰富的API,让开发者像鼠标一样控制浏览器的各种行为。Puppeteer是一个Node库,提供发了一个高级API来通过DevTools协议控制Chromium或Chrome。Puppeteer默认以…

SDN实战团技术分享(三十八):DPDK助力NFV与云计算

DPDK最初动机很简单,网络处理器的软件解决方案,证明IA多核处理器能够支撑高性能数据包处理。 什么是DPDK?对于用户来说,它可能是一个出色的包数据处理性能加速软件库;对于开发者来说,它可能是一个实践包处…

配置鼠标右键edit with notepad

注:notepad为一个轻量级的代码文本编辑器,还可以安装代码对比工具等,大大提供办公效率,十分方便。安装后,可能右键无法直接用notepad打开,需要在软件中,选择文件打开,本文介绍如果设…

内网Windows Git Server部署

疫情下,公司与家用电脑切换,导致代码更新接不上,最最最重要公司代码不能上传外网,因此内网 Git Server部署这稿子。 Server部署主要安装【Java、Git、TortoiseGit、Gitblit】前三为傻瓜安装,重点为Gitblit配置修改及部…

Flutter高仿微信-第36篇-单聊-语音通话

Flutter高仿微信系列共59篇,从Flutter客户端、Kotlin客户端、Web服务器、数据库表结构、Xmpp即时通讯服务器、视频通话服务器、腾讯云服务器全面讲解。 详情请查看 效果图: 目前市场上第三方音频接口的价格高的吓人 语音通话价格: 5元/千分钟…

大规模ddos攻击事件,ddos攻击会暴露ip吗

1月4日,谷歌云安全可靠性工程师Damian Menscher在推特上表示,根据CVE-2021-22205漏洞利用报告,有攻击者正在利用 GitLab 托管服务器上的安全漏洞来构建僵尸网络,并发起规模惊人的分布式拒绝服务攻击(DDoS)其…

产品新人必看:入职前的准备及快速适应产品工作

​我第一次做分享,没有什么经验,不知道能不能讲好。 我先自我介绍一下,我是从UED转产品的,我现在这家公司已经快干了一年了,我是去年的5月份入职的。 求职期间陪学也帮了我很多忙,我基本上是全天有什么问…

线上课和线下课各自优缺点,PLC工程师进阶上位机应该知道

先说线上课优点: 价格较低, 视频学习,可以随时随地学习,不用辞职学习,降低职业风险 缺点: 没有学习氛围,对于自制能力差的同学,很难坚持下去 没有老师指点,一旦遇到问题很…

利用Amber热力学积分计算相对自由能变化

上周四,何博士为大家在北鲲云的直播间分享了Amber热力学积分计算相对自由能变化(直播回放可在视频号:北鲲云-直播回放中查看)。 直播结束后有很多小伙伴来向我们要PPT资料,这里何博士也为大家准备了文字版本的教程。将…

企业实战!基于Harbor搭建企业镜像仓库

企业实战!基于Harbor搭建企业镜像仓库 虽然Docker官方提供了Docker Hub作为公共的Registry服务器,给到用户进行镜像的保存和管理工作。但对于企业而言,考虑到安全性和网络效率等原因,通常会搭建私有的Registry服务器,用…

<C++>深度学习多态

目录 一、概念 二、多态的定义及实现 虚函数重写的两个例外: C11override 和 rinal 三、抽象类 接口继承和实现继承 四、多态的原理 五、单继承和多继承中的虚函数表 六、继承和多态常见的面试题 一、概念 概念:通俗来说,就是多种形…

Redis数据库redisDb源码分析

写在前面 以下内容是基于Redis 6.2.6 版本整理总结 一、组织方式 Redis服务器将所有的数据库 都保存在src/server.h/redisServer结构中的db数组中。db数组的每个entry都是src/server.h/redisDb结构,每个redisDb结构代表一个数据库。Redis默认有16个数据库。 1.1…

TDengine安装使用

引言 近期,听说了时序数据库TDengine,本人的好奇心又出来了,同是时序数据库的InfluxDB不也挺好的嘛?通过一些网上的资料以及些简单的实际操作,本人得出的结论是: 数据量少时,InfluxDB的性能好些…

MCE | TGF-β 信号通路

转化生长因子 (Transforming growth factor beta,TGF-β) 是一类多功能的细胞因子,可由多种组织细胞产生。TGF-β 信号通路是由众多成员的多功能细胞因子,与相应的受体、细胞内信号转导分子组成的通路,能影响疾病发生和发展&#…

win10利用minikube在自己的电脑上搭建k8s

首先默认你的电脑上装了docker,没有的话参考这篇 下面开始步入正题: 步骤讲解 首先下载minikube,点击这个链接,根据自己的环境生成相应的配置命令,我自己的话是64位win10系统,管理员打开cmd运行命令如下&#xff1a…

Flutter高仿微信-第33篇-单聊-图片

Flutter高仿微信系列共59篇,从Flutter客户端、Kotlin客户端、Web服务器、数据库表结构、Xmpp即时通讯服务器、视频通话服务器、腾讯云服务器全面讲解。 详情请查看 效果图: 详情请参考 Flutter高仿微信-第29篇-单聊 , 这里只是提取图片实现的…

更简洁的参数校验,使用 SpringBoot Validation 对参数进行校验

在开发接口时,如果要对参数进行校验,你会怎么写?编写 if-else 吗?虽然也能达到效果,但是不够优雅。 今天,推荐一种更简洁的写法,使用 SpringBoot Validation 对方法参数进行校验,特…

k8s dashboard安装部署实战详细手册

文章目录一、k8s dashboard搭建1.选择版本2.下载yaml3.执行yaml4.访问dashboard5.token登录6.配置权限结尾一、k8s dashboard搭建 1.选择版本 dashboard和k8s存在版本对应关系,具体可以去github查找https://github.com/kubernetes/dashboard/releases 由于我的k8s…