ElasticSearch入门详解

ElasticSearch入门详解

一、简介

在这里插入图片描述

Elasticsearch是一个开源的分布式、RESTful 风格的搜索和数据分析引擎,它的底层是开源库Apache Lucene。

Lucene 可以说是当下最先进、高性能、全功能的搜索引擎库——无论是开源还是私有 。

为了解决Lucene使用时的繁复性,于是Elasticsearch便应运而生。它使用 Java 编写,内部采用 Lucene 做索引与搜索,但是它的目标是使全文检索变得更简单,简单来说,就是对Lucene 做了一层封装,它提供了一套简单一致的 RESTful API 来帮助我们实现存储和检索。

它可以被下面这样准确地形容:

  • 一个分布式的实时文档存储,每个字段可以被索引与搜索;
  • 一个分布式实时分析搜索引擎;
  • 能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据

在这里插入图片描述

Kibana 是一个开源的分析和可视化平台,旨在与 Elasticsearch 合作。Kibana 提供搜索、查看和与存储在 Elasticsearch 索引中的数据进行交互的功能。开发者或运维人员可以轻松地执行高级数据分析,并在各种图表、表格和地图中可视化数据。

二者都是开箱即用,在官网即可下载,二者都要使用其对应的版本
Elasticsearch插件下载地址:

elasticsearch-head:是一个用于浏览ElasticSearch集群并与其进行交互的Web项目

GitHub托管地址:https://github.com/mobz/elasticsearch-head

ik分词插件下载地址: https://github.com/medcl/elasticsearch-analysis-ik/releases (下载对应版本即可)

把ik分词插件解压到elasticsearch-7.8.0/plugins/ik 文件夹 ,没有ik 文件夹就创建,并解压到该目录即可。

二、Elasticsearch核心模块

Lucene的写流程和读流程 :

在这里插入图片描述

虚线箭头(a、b、c、d)表示写索引的主要过程,实线箭头(1-9)表示查询的主要过程。

Lucene中的主要模块及模块说明如下:

analysis:主要负责词法分析及语言处理,也就是我们常说的分词,通过该模块可最终形成存储或者搜索的最小单元Term。

index模块:主要负责索引的创建工作。

store模块:主要负责索引的读写,主要是对文件的一些操作,其主要目的是抽象出和平台文件系统无关的存储。

queryParser模块:主要负责语法分析,把我们的查询语句生成Lucene底层可以识别的条件。

search模块:主要负责对索引的搜索工作。

similarity模块:主要负责相关性打分和排序的实现。

三、Elasticsearch基本概念
全文搜索(Full-text Search)

全文检索是指计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。

倒排索引(Inverted Index)

该索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引(inverted index)。Elasticsearch能够实现快速、高效的搜索功能,正是基于倒排索引原理。

节点 & 集群(Node & Cluster)

Elasticsearch 本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个Elasticsearch实例。单个Elasticsearch实例称为一个节点(Node),一组节点构成一个集群(Cluster)。

索引(Index)

Elasticsearch 数据管理的顶层单位就叫做 Index(索引),相当于关系型数据库里的数据库的概念。另外,每个Index的名字必须是小写。

文档(Document)

Index里面单条的记录称为 Document(文档)。许多条 Document 构成了一个 Index。Document 使用 JSON 格式表示。同一个 Index 里面的 Document,不要求有相同的结构(scheme),但是最好保持相同,这样有利于提高搜索效率。

类型(Type将被弃用)

Document 可以分组,比如employee这个 Index 里面,可以按部门分组,也可以按职级分组。这种分组就叫做 Type,它是虚拟的逻辑分组,用来过滤 Document,类似关系型数据库中的数据表。
 不同的 Type 应该有相似的结构(Schema),性质完全不同的数据(比如 products 和 logs)应该存成两个 Index,而不是一个 Index 里面的两个 Type(虽然可以做到)。

文档元数据(Document metadata)

文档元数据为_index, _type, _id, 这三者可以唯一表示一个文档,_index表示文档在哪存放,_type表示文档的对象类别,_id为文档的唯一标识。

字段(Fields)

每个Document都类似一个JSON结构,它包含了许多字段,每个字段都有其对应的值,多个字段组成了一个 Document,可以类比关系型数据库数据表中的字段。
 在 Elasticsearch 中,文档(Document)归属于一种类型(Type),而这些类型存在于索引(Index)中,下图展示了Elasticsearch与传统关系型数据库的类比:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9WHIJnlR-1626781764063)(E:\Markdown\imgs\1626665099395.png)]

一个Elasticsearch请求和任何 HTTP 请求一样,都由若干相同的部件组成:
curl -X<VERB> '<PROTOCOL>://<HOST>:<PORT>/<PATH>?<QUERY_STRING>' -d '<BODY>'

返回的数据格式为JSON,因为Elasticsearch中的文档以JSON格式储存。其中,被 < > 标记的部件:

在这里插入图片描述

对于HTTP方法,它们的具体作用为:

在这里插入图片描述

四、Elasticsearch基本操作

全部的操作都在Kibana中完成 。

插入数据

首先创建index为test, 创建type为event, 插入id为1的第一条数据,只需运行下面命令就行:

PUT /test/event/1
{
  "host": "Dave",
  "title": "Elasticsearch",
  "description": "Hello Elasticsearch",
  "attendees": ["Dave", "Andrew", "David", "Clint"],
  "date": "2021-07-19T18:30"
}
查询数据

查询数据的命令为GET,查询命令也是Elasticsearch最为重要的功能之一。比如我们想查询test中event里面id为1的数据,运行命令如下:

GET /test/event/1
修改数据

修改数据的命令为POST, 比如我们想要将test中event里面id为1的host改为Jiang,那么需要运行命令如下:

POST /test/event/1/_update
{
   "doc": {"host": "Jiang"}
}
删除数据

比如我们想要删除test中event里面id为2的数据,只需运行下面命令即可:

DELETE /test/event/1

如果想删除整个event类型,可输入命令:

DELETE /test/event

如果想删除整个test索引,可输入命令:

DELETE /test
IK分词操作:

ik_smart:最少切分

GET _analyze
{
  "analyzer": "ik_smart",
  "text": "我爱中国共产党万岁"
}

ik_max_word:最细粒度划分,穷尽词库的可能

GET _analyze
{
  "analyzer": "ik_max_word",
  "text": "我爱中国共产党"
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值