当前位置: 代码迷 >> 综合 >> ELK技术栈系列-ElasticSearch(一) ElasticSearch快速入门
  详细解决方案

ELK技术栈系列-ElasticSearch(一) ElasticSearch快速入门

热度:75   发布时间:2024-02-28 10:52:23.0

一、 什么是 Elastic Search

ElasticSearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式的全文搜索引擎,其对外服务是基于 RESTful web 接口发布的。Elasticsearch 是用 Java 开发的应用,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到近实时搜索,稳定,可靠,快速,安装使用方便。

1 相关概念

1.1 cluster

集群。ElasticSearch 集群由一或多个节点组成,其中有一个主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。ElasticSearch 的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部看 ElasticSearch集群,在逻辑上是个整体,你与集群中的任何一个节点通信和与整个 ElasticSearch 集群通信是等价的。也就是说,主节点的存在不会产生单点安全隐患、并发访问瓶颈等问题。

1.2 shards

primary shard:代表索引的主分片,ElasticSearch 可以把一个完整的索引分成多个primary shard,这样的好处是可以把一个大的索引拆分成多个分片,分布存储在不同的ElasticSearch 节点上,从而形成分布式存储,并为搜索访问提供分布式服务,提高并发处理能。primary shard 的数量只能在索引创建时指定,并且索引创建后不能再更改 primaryshard 数量。

1.3 replicas

replica shard:代表索引主分片的副本,ElasticSearch 可以设置多个 replica shard。replica shard 的作用:一是提高系统的容错性,当某个节点某个 primary shard 损坏或丢失时可以从副本中恢复。二是提高 ElasticSearch 的查询效率,ElasticSearch 会自动对搜索请求进行负载均衡,将并发的搜索请求发送给合适的节点,增强并发处理能力。

1.4 Index

索引。相当于关系型数据库中的表。其中存储若干相似结构的 Document 数据。如:客户索引,订单索引,商品索引等。ElasticSearch 中的索引不像数据库表格一样有强制的数据结构约束,在理论上,可以存储任意结构的数据。但了为更好的为业务提供搜索数据支撑,还是要设计合适的索引体系来存储不同的数据。

1.5 Type

类型。每个索引中都必须有唯一的一个 Type,Type 是 Index 中的一个逻辑分类。ElasticSearch 中的数据 Document 是存储在索引下的 Type 中的。

注 意 : ElasticSearch5.x 及 更 低 版 本 中 , 一 个 Index 中 可 以 有 多 个 Type 。ElasticSearch6.x 版本之后,type 概念被弱化,一个 index 中只能有唯一的一个 type。且在 7.x 版本之后,删除 type 定义。

1.6 Document

文档。ElasticSearch 中的最小数据单元。一个 Document 就是一条数据,一般使用JSON数据结构表示。每个Index下的Type中都可以存储多个Document。一个Document中可定义多个 field,field 就是数据字段。

如:学生数据({"name":"张三", "age":20,"gender":"男"})。

1.7 反向索引|倒排索引

对数据进行分析,抽取出数据中的词条,以词条作为 key,对应数据的存储位置作为value,实现索引的存储。这种索引称为倒排索引。倒排索引是Document写入ElasticSearch时分析维护的。

如:

                                                                                       数据
商品主键 商品名 商品描述
1 荣耀 10 更贵的手机
2 荣耀 8 相对便宜的手机
3 IPHONE X

要卖肾买的手机

                                                                                      分析结果、倒排索引
词条 数据
手机 1,2,3
便宜 2
卖肾 3
相对 2
荣耀 1,2
IPHONE 3

2 ElasticSearch 常见使用场景

维基百科:全文检索,高亮显示,搜索推荐

The Guardian(国外的一个新闻网站),此平台可以对用户的行为(点击、浏览、收藏、评论)、社区网络数据(对新闻的评论等)进行数据分析,为新闻的发布者提供相关的公众反馈。

Stack Overflow(国外的程序异常讨论论坛)

Github(开源代码管理),在千亿级别的代码行中搜索信息

电子商务平台等。

3 为什么不用数据库做搜索?

3.1 查询语法复杂度高。

如:电商系统中搜索商品数据 - select * from products where name like '%关键字%' and price bewteen xxx and yyy and ......。不同的用户提供的查询条件不同,需要提供的动态 SQL 过于复杂。

3.2 关键字索引不全面,搜索结果不符合要求

如:电商系统中查询商品数据,条件为商品名包含' 笔记本电脑 '。那么对此关键字的分析结果为-笔记本、电脑、笔记等。对应的查询语法应该为 - select * from products where name like '%笔记本%' or name like '%电脑%' .......

3.3 效率问题

数据量越大,查询反应效率越低。

  相关解决方案