Elasticsearch是一个分布式、restful风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。作为Elastic Stack的核心,它集中存储您的数据,帮助您发现意料之中以及意料之外的情况。
1、Elasticsearch是什么
The Elastic Stack,包括Elasticsearch、Kibana、Beats和Logstash(也成为ELK Stack)。能够安全可靠地获取任何来源、任何格式的数据,然后实时地对数据进行搜索、分析和可视化。Elasticsearch,简称为ES,ES是一个开源的高扩展的分布式全文搜索引擎,是整个Elastic Stack技术栈的核心。它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。
2、为什么用Elasticsearch?
关系型数据库不能够很好的支持非结构化的数据文本,他们的全文检索都实现的很鸡肋,一般也没人用数据库存储存文本字段。进行全文检索需要扫描整个表,如果数据量大的话即使对sql的语法优化,也收效甚微。建立了索引,但是维护起来也很麻烦,对于insert和update操作都会重新构建索引。
基于以上原因可以分析得出,在以下的情况下,使用常规的搜索方式,性能是非常差的:
- 搜索的数据对象是大量的非结构化的文本数据
- 文件记录量达到数十万或数百万个甚至更多
- 大量即基于交互式文本的查询
- 需要非常灵活的全文搜索查询
- …
3、Elasticsearch的实现原理
Elasticsearch的实现原理主要分为以下几个步骤:
- 首先用户将数据提交到Elasticsearch数据库中
- 再通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据
- 当用户搜索数据的时候,再根据权重将结果排名,打分
- 最后将返回结果呈现给用户
Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。Elasticsearch是分布式的,这意味着索引可以被分成分片,每个分片可以有0个或多个副本。每个节点托管一个或多个分片,并充当协调器将操作委托给正确的分片。再平衡和路由是自动完成的。相关数据通常存储在同一个索引中,该索引由一个或多个主分片和零个或多个复制分片组成。一旦创建了索引,就不能更改主分片的数量。