欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

初学ElaticSearch(ES)(一)

时间:2023-07-24
ES简介

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

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

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

全文检索:

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

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

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

确定原始内容(即要搜索的内容) —->采集文档—->创建文档—->分析文档—->索引文档

红色表示搜索过程,从索引库中搜索内容,搜索过程包括:

用户通过搜索界面—->创建查询—->执行搜索,从索引库搜索—->渲染搜索结果

全文检索大体分两个过程,索引创建 (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的目录结构如下:

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

启动ES服务

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

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

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

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

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

注意事项一: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目录下。

Kibana客户端安装(Windows版)

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

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

安装完成后

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

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

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

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

i18n.locale: “zh-CN”

Elasticsearch head客户端

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

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

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

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

使用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_wordGET /_analyze{ "analyzer": "ik_max_word", "text": "乒乓球明年总冠军"}

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

#方式二ik_smartGET /_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可以看成是一个数据库,只是和关系型数据库比起来数据格式和功能不一样而已

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,}

自动判断的规则如下:

Elasticsearch中支持的类型如下:

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上进行

1、创建索引

​ 创建具有显式映射的索引

PUT /my-index{ "mappings": { "properties": { "age": { "type": "integer" }, "email": { "type": "keyword" }, "name": { "type": "text" } } }}

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

向现有映射添加字段

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 ##开启索引

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。