ElasticSearch学习笔记(一)

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
函数计算FC,每月15万CU 3个月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: ElasticSearch是面向文档(document oriented)的,这意味着它可以存储整个对象或文档(document)。然而它不仅仅是存储,还会索引(index)每个文档的内容使之可以被搜索。在Elasticsearch中,你可以对文档(而非成行成列的数据)进行索引,搜索、排序、过滤。

ES核心概念

​ ElasticSearch是面向文档(document oriented)的,这意味着它可以存储整个对象或文档(document)。然而它不仅仅是存储,还会索引(index)每个文档的内容使之可以被搜索。在Elasticsearch中,你可以对文档(而非成行成列的数据)进行索引,搜索、排序、过滤。

es与关系型数据库对比

Elasticsearch 关系型数据库(MySql)
索引(indices) 数据库(database)
类型(Types) 表(tables)
文档(Documents) 行(rows)
字段(fields) 列(columns)

elasticsearch(集群)中可以包含多个索引(数据库),每个索引中可以包含多个类型(表),每个类型下又包含多 个文档(行),每个文档中又包含多个字段(列)。

物理设计:

​ elasticsearch 在后台把每个索引划分成多个分片,每分分片可以在集群中的不同服务器间迁移

逻辑设计:

一个索引类型中,包含多个文档,比如说文档1,文档2。 当我们索引一篇文档时,可以通过这样的一各顺序找到 它: 索引 > 类型 > 文档ID ,通过这个组合我们就能索引到某个具体的文档。 注意:ID不必是整数,实际上它是个字 符串。

ES相关概念

索引

​ 索引是映射类型的容器,Elasticsearch的索引是一个非常大的文档的集合。一个索引由一个名字来标识(必须全部是小写字母),当我们要对对应于这个索引中的文档进行索引、搜索、更新和删除的时候,都要使用到这个名字。索引类似于关系型数据库中Database的概念。在一个集群中,可以定义任意多的索引。

类型

​ 在一个索引中,你可以定义一种或多种类型。一个类型是你的索引的一个逻辑上的分类/分区,其语义完全由你来定。通常,会为具有一组共同字段的文档定义一个类型。比如说,我们假设你运营一个博客平台并且将你所有的数据存储到一个索引中。在这个索引中,你可以为用户数据定义一个类型,为博客数据定义另一个类型,当然,也可以为评论数据定义另一个类型。类型类似于关系型数据库中Table的概念。

在7.X版本中,一个index下只能存在一个type,创建index时可不指定type

文档

​ 一个文档是一个可被索引的基础信息单元。比如,你可以拥有某一个客户的文档,某一个产品的一个文档,当然,也可以拥有某个订单的一个文档。文档以JSON(Javascript Object Notation)格式来表示,而JSON是一个到处存在的互联网数据交互格式。
文档有几个 重要属性 :

  • 自我包含,一篇文档同时包含字段和对应的值,也就是同时包含 key:value!
  • 可以是层次型的,一个文档中包含自文档,复杂的逻辑实体就是这么来的!
  • 灵活的结构,文档不依赖预先定义的模式,我们知道关系型数据库中,要提前定义字段才能使用,
    在elasticsearch中,对于字段是非常灵活的,有时候,我们可以忽略该字段,或者动态的添加一个
    新的字段。

倒排索引

​ elasticsearch使用的是一种称为倒排索引的结构,采用Lucene倒排索引作为底层。这种结构适用于快速的全文搜索, 一个索引由文档中所有不重复的列表构成,对于每一个词,都有一个包含它的文档列表。

​ 例如以下文档:

id 文档内容
1 php是世界上最好的语言
2 汉语是世界上使用最广泛的语言

为了创建倒排索引,我们首先要将每个文档拆分成独立的词(或称为词条或者tokens),然后创建一个包含所有不重 复的词条的排序列表(去除无意义的词,比如:'是',的'),然后列出每个词条出现在哪个文档 :

单词 文档1 文档2
php ×
世界
最好 ×
语言
汉语 ×
使用 ×
最广泛 ×

基于以上结构构建的倒排索引结果如下(这里省去了位置信息):

单词 文档id列表
php 1
世界 1,2
最好 1
语言 1,2
汉语 2
使用 2
最广泛 2

当我们试图搜索 '世界' 的时候,只需要查看单词 这一列,然后获取相关文档ID即可返回。

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
10月前
|
SQL JSON API
ELK技术栈 - Elasticsearch 学习笔记(三)
ELK技术栈 - Elasticsearch 学习笔记(三)
125 0
|
10月前
|
存储 JSON API
ELK技术栈 - Elasticsearch 学习笔记(二)
ELK技术栈 - Elasticsearch 学习笔记(二)
269 0
|
10月前
|
存储 SQL JSON
ELK技术栈 - Elasticsearch 学习笔记(一)
ELK技术栈 - Elasticsearch 学习笔记(一)
293 0
|
10月前
|
JSON 自然语言处理 开发工具
elasticsearch7.X学习笔记
elasticsearch7.X学习笔记
186 0
|
10月前
|
JSON 自然语言处理 负载均衡
数据库-Elasticsearch进阶学习笔记(集群、故障、扩容、简繁体、拼音等)
数据库-Elasticsearch进阶学习笔记(集群、故障、扩容、简繁体、拼音等)
108 0
|
10月前
|
运维 监控 搜索推荐
数据库-ElasticSearch学习笔记
数据库-ElasticSearch学习笔记
94 0
|
存储 搜索推荐 Java
Elasticsearch的配置学习笔记
Elasticsearch是一个基于Lucene的搜索服务器。它提供一个分布式多用户能力的全文搜索引擎,基于RESTful web接口,Elasticsearch是用Java语言开发的。
90 0
|
数据挖掘 BI 定位技术
ElasticSearch学习笔记(八) 聚合之Bucket详解
Elasticsearch 聚合(Aggregation)是 Elasticsearch 中用于处理搜索结果的重要工具之一。它可以帮助我们对搜索结果进行各种数据统计和分析,以便更好地理解搜索结果数据的特征和趋势。
256 2
|
自然语言处理 算法 Docker
ElasticSearch学习笔记(四) IK分词
前面了解了Elasticsearch中对索引及文档的基本操作。今天了解Es中非常重要的一个概念:分词。在 Elasticsearch 中,中文分词的首选分词器是 ik 分词器。在本文中,我们将介绍如何使用 ik 分词器将商品名称(name)字段进行分词,并详细介绍分词过程及结果等。
611 2
|
JSON 数据挖掘 API
ElasticSearch学习笔记(三) Es文档基础操作
在Elasticsearch中,文档是索引的基本单位。一个文档代表了一个JSON对象,它包含了一个或多个字段,每个字段有一个字段名和一个字段值。一个索引可以包含多个文档,每个文档都有一个唯一的ID。
365 2