简介

ES是一个开源的高扩展的分布式全文搜索引擎,它可以近乎实时地存储、检索数据

ELK(ES + logstash + kibana)

基本概念

  • 索引(index):类似于关系型数据库中的库,是存储数据的地方。一个索引可以包含多个类型(type)。
  • 类型(type):类似于关系型数据库中的表,是定义数据结构的地方。一个类型可以包含多个文档(document)。(ES 8.0 版本弃用这个概念)
  • 文档(document):类似于关系型数据库中的行,是存储具体数据的地方。一个文档可以包含多个字段(field)。
  • 字段(field):类似于关系型数据库中的列,是定义数据属性的地方。一个字段可以有不同的类型,如字符串、数字、日期等。
  • 映射(mapping):类似于关系型数据库中的表结构定义,是定义字段类型和属性的地方。映射可以在创建索引时指定,也可以在创建文档时自动推断。
  • 分片(shard):是索引分片,ES可以把一个完整的索引分成多个分片,分布到不同的节点上,提高系统性能和可扩展性。
  • 副本(replica):是索引副本,ES可以设置多个索引的副本,提高系统容错性和可用性。

ES为什么快

Elasticsearch 之所以快,有以下几个原因:

  • Elasticsearch 使用了倒排索引的数据结构,可以高效地找到包含关键词的文档。
  • Elasticsearch 利用了文件系统缓存来加速搜索,将索引的热点区域保留在物理内存中。
  • Elasticsearch 支持多节点的集群方案,提高了整个系统的并发处理能力。

倒排索引

倒排索引是一种索引方法,它可以根据单词快速获取包含这个单词的文档列表。倒排索引的原理是,首先对文档进行分词,然后建立一个单词词典,记录每个单词出现在哪些文档中。这样,当搜索一个关键词时,就可以直接从单词词典中找到对应的文档,而不需要遍历所有的文档。

倒排索引有两种形式:一条记录的水平反向索引和一个单词的水平反向索引。前者只记录每个单词出现在哪些文档中,后者还记录每个单词在每个文档中的位置。