初学ElaticSearch(ES)(一)

ES简介

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

Lucene:可以理解为Java的一个核心的类库。

全文检索:只要是和我搜索内容相关的数据,不管是什么数据都会被查出来。

全文检索:

  • 因为全文检索使用过程中会建立索引,通过索引来查询数据,创建索引的过程是非常耗时的。但是索引一旦创建就可以多次使用,全文检索主要处理的是查询,所以耗时间创建索引是值得的。
  • 但是每次更新,删除数据都需要重新创建索引,所以我们可以定时重新创建索引,比如一天一次。

全文检索应用场景

  • ​ 对于数据量大、数据结构不固定的数据可采用全文检索方式搜索,比如:百度、Google等搜索引擎、论坛站内搜索、电商网站站内搜索等。

全文检索的实现流程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9DEThmPK-1644156512549)(C:\Users\19637\AppData\Roaming\Typora\typora-user-images\image-20220206162753645.png)]

  • 绿色表示索引过程,对要搜索的原始内容进行索引构建一个索引库,索引过程包括:

    • 确定原始内容(即要搜索的内容) —->采集文档—->创建文档—->分析文档—->索引文档
  • 红色表示搜索过程,从索引库中搜索内容,搜索过程包括:

    • 用户通过搜索界面—->创建查询—->执行搜索,从索引库搜索—->渲染搜索结果
  • 全文检索大体分两个过程,索引创建 (Indexing) 和搜索索引 (Search) 。

    • ​ 索引创建:将现实世界中所有的结构化和非结构化数据提取信息,创建索引的过程。
    • ​ 搜索索引:就是得到用户的查询请求,搜索创建的索引,然后返回结果的过程。

ES安装与启动

windows版本安装(7.4版本)

  • ElasticSearch分为Linux和Window版本
  • ElasticSearch的官方地址: https://www.elastic.co/products/elasticsearch
  • ElasticSearch的官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/7.4/index.html
  • 安装需要的软件可以在网盘自取:链接:https://pan.baidu.com/s/11Z7tGoTZtSdLaHfjVPd-zQ
    提取码:1234

下载好压缩包以后,Window版的ElasticSearch的安装很简单,解压开即安装完毕,解压后的ElasticSearch的目录结构如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存失败,源站可能有防盗链机制,建议将图片保存下来直接上传上传(imPypECj1a3u-1644156512550)(C:\Users\19637\AppData\Roaming\Typora\typora-user-images\image-20220206172023761.png)(C:\Users\19637\AppData\Roaming\Typora\typora-user-images\image-20220206172023761.png)]

安装IK分词器插件(对中文分词用的):在plugin目录下创建ik文件夹,将elasticsearch-analysis-ik-7.4.0.zip内容解压到ik目录下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XTQTk3np-1644156512550)(C:\Users\19637\AppData\Roaming\Typora\typora-user-images\image-20220206174127533.png)]

启动ES服务

点击ElasticSearch下的bin目录下的elasticsearch.bat文件启动

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IomKY2xj-1644156512551)(C:\Users\19637\AppData\Roaming\Typora\typora-user-images\image-20220206174917400.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RIH1ALgE-1644156512552)(C:\Users\19637\AppData\Roaming\Typora\typora-user-images\image-20220206175217217.png)]

注意:9300(集群用的)是tcp通讯端口,集群间和TCPClient都执行该端口,

​ 9200(客户端连接用的如:Java)是http协议的RESTful接口 。

通过浏览器访问ElasticSearch服务器:http://localhost:9200

访问成功后会出现这个页面。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RaLmrBRC-1644156512552)(C:\Users\19637\AppData\Roaming\Typora\typora-user-images\image-20220206175258415.png)]

注意事项一:
	ElasticSearch是使用java开发的,且本版本的es需要的jdk版本要是1.8以上,所以安装ElasticSearch之前保证JDK1.8+安装完毕,并正确的配置好JDK环境变量,否则启动ElasticSearch失败。

注意事项二:出现闪退,通过路径访问发现“空间不足”
【解决方案】
	修改jvm.options文件的22行23行, Elasticsearch启动的时候占用1个G的内存,可改成512m:
	-Xmx512m:设置JVM最大可用内存为512M。
	-Xms512m:设置JVM初始内存为512m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。

jvm.options文件在Config目录下。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EQu63FVu-1644156512553)(C:\Users\19637\AppData\Roaming\Typora\typora-user-images\image-20220206175713923.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LCGPmiwT-1644156512554)(C:\Users\19637\AppData\Roaming\Typora\typora-user-images\image-20220206175910644.png)]

Kibana客户端安装(Windows版)

Kibana是一个针对Elasticsearch的开源分析及可视化平台,用来搜索、查看交互存储在Elasticsearch索引中的数据。

解压kibana-7.4.0-windows-x86_64.zip(解压很慢**,**耐心等待…)

安装完成后

进入config目录修改kibana.yml第2、28行,配置自身端口和连接的ES服务器地址。
server.port: 5601
elasticsearch.hosts: ["http://localhost:9200"]

进入kibana的bin目录,双击kibana.bat启动:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SEiAToCT-1644156512555)(C:\Users\19637\AppData\Roaming\Typora\typora-user-images\image-20220206181830473.png)]

看到这个后 访问 http://localhost:5601/,出现以下界面说明安装成功。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qjlYvEOI-1644156512555)(C:\Users\19637\AppData\Roaming\Typora\typora-user-images\image-20220206181917226.png)]

界面是英文的,如果希望是中文,可以修改kibana.yml第114行:

i18n.locale: “zh-CN”

Elasticsearch head客户端

将ElasticSearch-head-Chrome-0.1.5-Crx4Chrome.crx用压缩工具解压,打开Chrome扩展程序,点” 加载已解压的扩展程序”按钮,找到解压目录即可。

head插件是ES的一个可视化管理插件,用来监视ES的状态,并通过head客户端和ES服务进行交互,比如创建映射、创建索引等。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kqGAQN9L-1644156512556)(C:\Users\19637\AppData\Roaming\Typora\typora-user-images\image-20220206182150701.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9kqQI281-1644156512557)(C:\Users\19637\AppData\Roaming\Typora\typora-user-images\image-20220206182205011.png)]

​ 将图标固定在工具条上。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-maBGFIx6-1644156512557)(C:\Users\19637\AppData\Roaming\Typora\typora-user-images\image-20220206182221185.png)]

点击head图标,输入ES服务器地址:http://localhost:9200

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PuLO9VUi-1644156512558)(C:\Users\19637\AppData\Roaming\Typora\typora-user-images\image-20220206182231376.png)]

使用IK分词器

​ IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始,IKAnalyzer已经推出 了3个大版本。最初,它是以开源项目Lucene为应用主体的,结合词典分词和文法分析算法的中文分词组件。新版本的IKAnalyzer3.0则发展为 面向Java的公用分词组件,独立于Lucene项目,同时提供了对Lucene的默认优化实现。

IK分词器3.0的特性如下:

  • 采用了特有的“正向迭代最细粒度切分算法“,具有60万字/秒的高速处理能力。
  • 采用了多子处理器分析模式,支持:英文字母(IP地址、Email、URL)、数字(日期,常用中文数量词,罗马数字,科学计数法),中文词汇(姓名、地名处理)等分词处理。
  • 对中英联合支持不是很好,在这方面的处理比较麻烦.需再做一次查询,同时是支持个人词条的优化的词典存储,更小的内存占用。
  • 支持用户词典扩展定义。
  • 针对Lucene全文检索优化的查询分析器IKQueryParser;采用歧义分析算法优化查询关键字的搜索排列组合,能极大的提高Lucene检索的命中率。

下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases

在没有使用IK分词器时,默认是standard方式分词,这种方式分词就是一个字就是一个词。

而IK分词器有两种分词模式:ik_max_word和ik_smart模式。

1、ik_max_word

会将文本做最细粒度的拆分,比如会将“乒乓球明年总冠军”拆分为“乒乓球、乒乓、球、明年、总冠军、冠军。

#方式一ik_max_word
GET /_analyze

{

 "analyzer": "ik_max_word",

 "text": "乒乓球明年总冠军"

}

2、ik_smart
会做粗粒度的拆分,比如会将“乒乓球明年总冠军”拆分为乒乓球、明年、总冠军。

#方式二ik_smart

GET /_analyze

{

 "analyzer": "ik_smart",

 "text": "乒乓球明年总冠军"

}

ES相关概念

先说Elasticsearch的文件存储,Elasticsearch是面向文档型数据库,一条数据在这里就是一个文档,用JSON作为文档序列化的格式,比如下面这条用户数据:

{
    "name" :     "jack",
    "sex" :      "Male",
    "age" :      25,
    "birthDate": "1990/05/01",
    "about" :    "I love to go rock climbing",
    "interests": [ "sports", "music" ]
}

Elasticsearch可以看成是一个数据库,只是和关系型数据库比起来数据格式和功能不一样而已

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3tInYt6s-1644156512559)(C:\Users\19637\AppData\Roaming\Typora\typora-user-images\image-20220206190048982.png)]

Elasticsearch核心概念

索引 index

文档存储的地方,类似于MySQL数据库中的数据库概念

类型type

如果按照关系型数据库中的对应关系,还应该有的概念。ES中没有的概念,这是ES和数据库的一个区别,在我们建立索引之后,可以直接往 索引 中写入文档

在6.0版本之前,ES中有Type的概念,可以理解成关系型数据库中的,但是官方说这是一个设计上的失误,所以在6.0版本之后Type就被废弃了。

字段Field

相当于是数据表的字段,字段在ES中可以理解为JSON数据的键,下面的JSON数据中,name 就是一个字段。

{
    "name":"jack"
}

映射 mapping

映射 是对文档中每个字段的类型进行定义,每一种数据类型都有对应的使用场景。

每个文档都有映射,但是在大多数使用场景中,我们并不需要显示的创建映射,因为ES中实现了动态映射。

我们在索引中写入一个下面的JSON文档,在动态映射的作用下,name会映射成text类型,age会映射成long类型。

{
    "name":"jack",
    "age":18,
}

自动判断的规则如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nvuAKZbC-1644156512559)(C:\Users\19637\AppData\Roaming\Typora\typora-user-images\image-20220206190419333.png)]

Elasticsearch中支持的类型如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Gv1Byesv-1644156512560)(C:\Users\19637\AppData\Roaming\Typora\typora-user-images\image-20220206190613111.png)]

  • string类型在ElasticSearch 旧版本中使用较多,从ElasticSearch 5.x开始不再支持string,由text和keyword类型替代。(已经废弃)
  • text 类型,需要分词设置text类型,比如Email内容、产品描述,应该使用text类型。
  • keyword类型 ,不需要分词设置keyword类型,比如email地址、主机名、状态码和标签。

文档 document

文档 在ES中相当于传统数据库中的的概念,ES中的数据都以JSON的形式来表示,在MySQL中插入一行数据和ES中插入一个JSON文档是一个意思。下面的JSON数据表示,一个包含3个字段的文档

{
    "name":"jack",
    "age":18,
    "gender":1
}

一个文档不只有数据。它还包含了元数据(metadata)——关于文档的信息。三个必须的元数据节点是:

节点说明
_index文档存储的地方
_type文档代表的对象的类
_id文档的唯一标识

ElasticSearch的客户端操作

实际开发中,主要有三种方式可以作为elasticsearch服务的客户端:

  • 第一种,elasticsearch-head插件

  • 第二种,使用elasticsearch提供的Restful接口直接访问

  • 第三种,使用elasticsearch提供的API进行访问

    因为官方推荐对Elasticsearch操作是在Kibana上。所以下面的操作全在Kibana上进行

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zZ9ob8Z5-1644156512561)(C:\Users\19637\AppData\Roaming\Typora\typora-user-images\image-20220206214159372.png)]

1、创建索引

  • 创建具有显式映射的索引
PUT /my-index
{
  "mappings": {
    "properties": {
      "age":    { "type": "integer" },  
      "email":  { "type": "keyword"  }, 
      "name":   { "type": "text"  }     
    }
  }
}

注意!!!:写在那里会被当成索引名。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BEdqSnqd-1644156512562)(C:\Users\19637\AppData\Roaming\Typora\typora-user-images\image-20220206203342048.png)]

  • 向现有映射添加字段

    put /my-index/_mapping
    {
    	"properties":{
    		"sex":{"type":"keyword"}
    	}
    }
    
  • 查看索引的映射

    GET /my-index/_mapping
    
  • 查看指定字段的映射

    GET /my-index/_mapping/field/sex
    
  • 删除索引

    DELETE /my-index
    
  • 修改索引状态

    Post /my-index/_close   ##关闭索引
    Post /my-index/_open 	##开启索引
    
  • 21
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值