ElasticSearch 二(概述、Rest、查询)

ElasticSearch(概述、Rest、查询篇)

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

具体详解访问此链接:https://baike.baidu.com/item/elasticsearch/3411206?fr=aladdin

一、ES核心概念(结构)

索引index----类型type----文档document

概述

学习集群、节点、索引、类型、文档、分片、映射的相关概念及操作

es是面向文档,关系行数据库和es客观对比

Relational DB ELasticsearch
数据库(database) 索引(indices)
表(tables) types
行(rows) documents
字段(columns) fields

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

物理设计:

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

逻辑设计:

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

文档 一个类型下可以有多个文档,这个文档就相当于mysql表中的多行数据

类型 一个索引下可以创建多个类型

索引

ES服务中会创建多个索引
每个缩影默认被分成5个分片
每个分片存在至少一个备份分片
备份分片 不会帮助检索数据(当ES检索压力特别大的时候才,备份分片才会帮助检索数据)
备份的分片必须放在不同的服务器中

物理设计:节点和分片 如何工作

一个集群至少有一个节点,而一个节点就是一个ElasticSearch进程节点可以有多个索引默认的,如果你创建索引,那么索引会至少有5个分片(primary shard ,又称为主分片)构成的,每一个主分片会有一个副本(replica shard,又称为复制分片)

img

上图是一个有3个节点的集群,可以看到主分片和对应的复制分片都不会在同一个节点内,这样有利于某个节点挂掉了,数据也不至于丢失,实际上一个分片就是一个Lucene索引,一个包含倒排索引的文件目录,倒排索引的结构使得ElasticSearch在不扫描全部文档的情况下,就可以告诉你那些文档包含特定的关键字

倒排索引:

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

列如现在有两个文档,每个文档包含如下内容

img

为了创建倒排索引,我们首先要将每个文档拆分成独立的词(或称为词条或者tokens),然后创建一个不包含所有补充度的词条的排序列表,然后列出每个词出现在那个文档

img

现在,我们视图搜索 to forever,只需要查看包含每个词条的文档

img

通过二维表的命中,来决定搜索的结果和权重的高低

两个文档都匹配,但是第一个文档比第二个文档的匹配程度更高,如果没有别的条件,现在这个刘昂个包含关键字的文档都将返回

在来看一个示例,比如我们通过博客标题来搜索博客文章,那么倒排索引列表就是这样的一个是结构

img

如果要搜索含有python标签的文章,那相对于查找所有原始数据而言,查找倒排索引后的数据将会快的多,只需要查看标签这一栏,然后获取相关的文章ID即可,完全过滤到无关的数据,来提高检索的效率

ElasticSearch的索引和Lucene的索引对比
在ElasticSearch中,索引这个词被频繁使用,这就是术语的使用,在ElasticSearch中,索引被分为多个分片,每份分片是一个Lucene的索引,所以一个ElasticSearch索引是由多个Lucene的索引组成的,这没啥好说的,因为ElasticSearch是使用,Lucene作为底层的封装,如无特指,说起索引都是指ElasticSearch的索引

属性field

一个文档中可以包含多个属性,类似于mysql 表中的一行数据有多个列

二、Rest风格说明

一种软件架构风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

基本Rest命令说明

method url地址 描述
PUT localhost:9200/索引名称/类型名称/文档id 创建文档(指定文档id)
POST localhost:9200/索引名称/类型名称 创建文档(随机文档id)
POST localhost:9200/索引名称/类型名称/文档id/_update 修改文档
DELETE localhost:9200/索引名称/类型名称/文档id 删除文档
GET localhost:9200/索引名称/类型名称/文档id 查询文档通过文档id
POST localhost:9200/索引名称/类型名称/_search 查询所有数据

1.索引

1.1创建一个索引

PUT /索引名/~类型~/文档id
{
   
	#请求体
}

在这里插入图片描述

自动增加了索引,数据也成功添加了。

在这里插入图片描述

  1. 指定字段类型

    在这里插入图片描述

  2. 获得这个规则,可以通过GET请求获取具体的信息

    在这里插入图片描述

1.2查看默认信息 GET dyt2

在这里插入图片描述
在这里插入图片描述
如果自己的文档字段没有指定类型,那么es就会给我们默认配置字段类型

  1. 使用es命令查看索引情况 通过 get _cat/ 可以获得es的当前很多信息

    在这里插入图片描述

1.3 修改索引

POST dyt2/_doc/1/_update
{
   
  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值