ElasticSearch 浅析
ElasticSearch 快速开始
来源:https://www.cnblogs.com/cjsblog/p/9439331.html
1、ElasticSearch
分布式的 RESTful 风格的搜索和数据分析引擎。
查询:允许执行和合并多种类型的搜索,诸如,结构化、非结构化、地理位置、度量指标。
速度:效率很高。
可扩展性:既能够在一台 PC 上运行,亦能够在承载了 PB 级数据的成百上千服务器上运行。
灵活性:具备多个案例场景,诸如,数字、文本、地理位置、结构化、非结构化。
2、基本概念
NRT(Near RealTime)
近乎实时的搜索平台,从索引文档到可以搜索的时间只有轻微的延迟。
Cluster
ES 支持一个或者多个节点的集群,共同保存数据,提供跨所有节点的联合索引和搜索功能。
Node
节点是一个单独的服务器,是集群的一部分,用于存储数据,并参与集群的索引和搜索功能。
Index
索引,相似数据特点的数据文档集合,诸如,顾客数据索引,产品目录索引,订单数据索引。索引具有名称标志,必须小写,该名称用于对其中存储的数据进行执行索引、搜索、更新和删除操作。
Document
文档是被索引的基本信息单元,文档存储格式为 JSON。
3、安装运行
tar -zxf elasticsearch-6.3.2.tar.gz
cd elasticsearch-6.3.2/bin
./elasticsearch
检查是否运行,curl http://ip:9200/
4、The REST API
集群健康
curl -X GET "localhost:9200/_cat/health?v"
健康状态有 green、yellow、red 三种状态。
green:所有功能正常;
yellow:所有数据可用,但是部分副本没有分配;
red:部分数据不可用;
集群节点数
curl -X GET "localhost:9200/_cat/nodes?v"
查看全部索引
curl -X GET "localhost:9200/_cat/indices?v"
创建索引
curl -X PUT "localhost:9200/andy?pretty"
返回信息
{
"acknowledged" : true,
"shards_acknowledged" : true,
"index" : "andy"
}
查看全部索引信息,会发现默认索引具有 5 个主分片和 1 个副本,状态为 yellow。由于当前情况下是单一节点,副本未被分配,当集群中加入一个新节点时,副本被分配到新的节点上,状态会变为 green。
全文搜索引擎 Elasticsearch
问题
关系型数据库的搜索效率低下,搜索不够精准,尤其海量数据的情况下,搜索性能不高,对于数据库的访问压力巨大,这些都是关系型数据库的搜索痛点
概要
全文搜索在各种业务场景都有着自身极大需要,开源 ElasticSearch 是目前全文搜索引擎的首选,可以实现快速存储、搜索和分析海量数据
ES 的底层是开源库 Lucene,ES 对 Lucene 进行了封装,提供了 REST API 的操作接口,开箱即用
基本概念
(1)Node 与 Cluster
ES 是一个分布式数据库,允许多台服务器协同合作,每台服务器可以运行多个 ES 实例,单个 ES 实例称为一个结点 Node,一组节点构成一个集群 Cluster
(2)Index
ES 数据管理的顶层单位叫做 Index 索引,与单个数据库同义,ES 索引所有字段,经过处理后写入一个反向索引(Inverted Index),查找数据的时候,直接查找索引
正向索引:从文档到词
假如有三个 txt 文档
Document_1: The cow says moo
Document_2: The cat and the hat
Document_3: The dish ran away with the spoon
解析每个文档出现的单词,然后建立从文档 (document) 到词组 (words) 的映射关系,这就是正向索引
反向索引:从词到文档
反向索引方向则是正向索引的逆向,建立从单词 (word) 到文档 (document lsit) 的映射关系
(3)Document
Index 里面的单条记录称为 Document(文档),许多条 Document 构成一个 Index,通常使用 JSON 数据格式
同一个 Index 里面的 Document,不要求有相同的结构(Schema),但是最好抱持相同,有利于提高搜索性能
(4)Type
Document 可以分组,比如 weather 这个 Index 里面,可以按城市分组(北京和上海),也可以按气候分组(晴天和雨天),这种分组叫做 Type,是虚拟的逻辑分组,用来过滤 Document
不同的 Type 应该具有相同的结构,比如,id 字段不能在这个组是字符串,在另一个组是数值,性质不同的数据(比如 products 和 logs)应该存成两个 Index,而不是一个 Index 里面的两个 Type
评论