安装elasticsearch

elasticsearch

Elasticsearch是一个基于Lucene的搜索服务器,也是属于NoSQL阵营的数据库。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口提供给我们操作的。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。除了es以外, Sphinx 、迅搜、Zebra、Solr 、Whoosh。

官网:https://www.elastic.co/cn/elasticsearch/

中文文档:https://www.elastic.co/guide/cn/index.html

最新版本:8.0 版本。目前在市面上常用的版本是6.x和7.x,甚至是5.x。

 

安装elasticsearch

支持单点部署和集群部署。

参数说明

浏览器访问:https://127.0.0.1:9200

要基于es实现全文搜索,可以参考以下文档了解关于全文搜索的内容。

https://www.elastic.co/guide/cn/elasticsearch/guide/current/full-text-search.html

全文搜索的实现,必须依靠es内部调用分词器对大文本语句进行词性分析,拆词,给每一个单词单独构建一个索引。

默认情况下,es只提供了标准分析器和关键字分析器,都是只能针对英文进行分词。

接下来,我们就可以通过postman测试。

注意:es提供的9200是restful api接口的端口,以https形式访问(es8.x默认是https),9300端口是Api对服务器的管理端口。

使用elasticsearch提供的标准分词器和关键字分词器的。

 

ik中文分词器

默认情况下,elasticsearch是外国开发的,所以本身对于中文分词构建分词索引的支持是比较差的。所以我们需要在elasticsearch软件中新增一个支持中文全文索引和对中文进行分词的插件,叫ik分词器。

注意:IK分词器插件的版本必须与elasticsearch的版本号同步。否则安装失败!

文档:https://github.com/medcl/elasticsearch-analysis-ik/releases

把IK分词器解压并复制到elasticsearch容器的/usr/share/elasticsearch/plugins目录下

注意:elasticsearch内部极其复杂,所以启动容器以后需要等待1分钟左右才对外提供搜索服务。

接下来,我们就可以通过postman测试。

注意:es提供的9200是restful api接口的端口,以https形式访问(es8.x默认是https),9300端口是Api对服务器的管理端口。

 

基于智能分词模式来查询分析词性,json数据

基于最大分词模式来查询分析词性,json数据

 

elasticsearch-head

elasticsearch-head 是用于监控 Elasticsearch 状态的客户端插件,包括数据可视化、执行增删改查操作等。不过开发中我们一般使用elasticsearch-head来查看elasticsearch的数据而已,真正对elasticsearch进行增删查改操作一般我们使用kibana或者postman或者编程语言实现的客户端来完成。

我们可以通过docker安装elasticsearch-head来对Elasticsearch 进行界面化管理。

访问elasticsearch-head:https://127.0.0.1:9100/,会发现无法连接elasticsearch,原因是因为跨域问题导致。

解决方案:修改容器elasticsearch中的elasticsearch.yml文件增加跨域支持即可。

修改elasticsearch.yml内容,增加跨域支持,如下:

把elasticsearch.yml文件再次复制到容器elasticsearch中,并重启容器elasticsearch。

修改容器elasticsearch-head的vendor.js让elasticsearch-head界面可以操作elasticsearch

修改vendor.js内容,把6886行与7573行所在的"application/x-www-form-urlencoded"替换成"application/json;charset=UTF-8",并保存文件,复制回容器elasticsearch-head中。

重启elasticsearch和elasticsearch-head容器

 

kibana

Kibana是一个针对Elasticsearch的开源分析及可视化平台,用来搜索、查看交互存储在Elasticsearch索引中的数据。使用Kibana,可以通过各种图表进行高级数据分析及展示。

kibana的版本必须与Elasticsearch一致,所以我们安装的kibana也是7.13.4版本。

修改让kibana能访问到Elasticsearch并完成汉化操作

kibana.yml中的内容需改如下:

修改完成以后,退出当前kibana容器,并重启kibana容器即可。

等待1分钟左右,打开浏览器直接访问https://127.0.0.1:5601/,即可。

 

快速入门

核心概念

mysql中的数据是面向集合的,而Elasticsearch是面向文档的,以json格式存储数据的NoSQL数据库,也是一个全文搜索引擎。

Elasticsearch关系型数据库(如Mysql)
索引(Index)数据库(Database)
类型(Type)表(Table)
文档(Document)行,记录(Row,Record)
字段(Field)列,字段(Column,Field)
映射(Mapping)约束(Schema)

注意:es中的类型在es7.x版本中已经没有,在后面的8.x版本中被彻底删除掉,与映射合并了。

 

倒排索引

倒排索引(Inverted Index),是Elasticsearch中的索引工作机制。倒排索引是区别于正排索引的概念:

  • 正排索引:是以文档对象的唯一ID作为索引,以文档内容作为记录。
  • 倒排索引:指的是将文档内容中的单词作为索引,将包含该词的文档ID作为记录。

正排索引与倒排索引

Elasticsearch的工作流程如下,因为使用倒排索引产生的文档记录要比mysql数据行少多了,所以会比较快。

在这里插入图片描述

 

基本使用

Elasticsearch提供了retfulAPI风格操作接口给开发者对索引、类型、文档、字段、映射等进行增删查改操作。

 

索引操作

创建索引

请求格式:

使用postman发起创建

image-20220901172920280

使用kibana的开发工具发送请求:

image-20220901173104500

上面创建索引成功以后,可以通过Elasticsearch-head来查看索引信息。

image-20220901173427180

也可以通过kibana提供的控制面板来查看索引信息。

image-20220901173606257

 

类型映射[了解]

相当于在mysql中创建数据表时的字段类型

kinana操作:

image-20220901174401136

使用kibana基于上面的goods映射类型创建文档数据并保存到elasticsearch

image-20220901175902661

 

数据类型[了解]

elasticsearch中支持的常见字段数据类型:

类型描述
text字符串类型,可以模糊查询, 可以分词查询,不能聚合、排序
keyword字符串类型,只能精准查询, 不能分词查询,可以聚合、排序
long有符号的64位整数, 范围:[−263 ~ 263-1]
Integer有符号的32位整数, 范围: [−231 ~ 231-1]
short有符号的16位整数, 范围: [-32768 ~ 32767]
byte有符号的8位整数, 范围: [-128 ~ 127]
float32位单精度浮点数
double64位双精度浮点数
boolean布尔类型,支持使用字符串,数字等零值表示true/false
date日期类型,
date_nanos日期纳秒类型,
binary二进制类型,Base64编码字符串的二进制值
Range范围类型,有integer_range,float_range,long_range,double_range,date_range等
array数组类型,ES中没有专门的数组类型, 直接使用[ ]定义即可,所有的成员的值必须是同一种数据类型
object对象类型,以json对象为结构

使用默认映射类型_doc代替上面手动创建的映射,es会内部自动推断字段类型

_doc 就是默认类型(default type),type在8.x版本会被彻底删除,以后使用默认类型_doc替代即可。

image-20220901180417801

 

查看索引

image-20220901180819965

 

删除索引

image-20220901181015807

 

文档操作

请求方法/methoduri地址描述
PUT(创建,修改)/索引名称/_doc/文档id创建文档(指定文档id)
POST(创建)/索引名称/_doc/文档id创建文档,如果uri地址只是以_doc结尾,文档id是随机生成的)
POST(修改)/索引名称/_doc/文档id/_update修改文档
DELETE(删除)/索引名称/_doc/文档id删除文档
GET(查询)/索引名称/_doc/文档id查询文档通过文档ID
POST(查询)/索引名称/_doc/文档id/_search查询数据
添加文档

方式1:使用PUT指定文档ID

image-20220901194334204

方式2:使用POST不指定文档ID

image-20220901194604235

方式3:通过POST指定文档ID

image-20220901194715791

 

修改文档

更新文档时文档的所有字段不管是否修改,都要全部填写

也可以使用PUT请求方法。

 

删除文档

image-20220901195529405

 

查询文档

查询文档有三种方式:

  • 主键查询:根据文档id查询
  • 精确查询:根据关键词查询,也叫term查询 浪潮之巅 => 浪潮之巅 ≠> 浪潮之巅续集
  • 匹配查询:根据输入的内容先对内容进行分词,再进行分词匹配查询索引 浪潮 => 浪潮之巅 => 浪潮之巅续集
准备数据

 

主键查询

image-20220901200015532

 

精确查询

kibana操作:

image-20220901200310262

 

匹配查询

查询所有

kibana操作:

image-20220901200915014

 

条件查询

格式:

kibana的操作:

image-20220901201136455

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注