是什么
Elasticsearch(简称ES)是一个基于Apache Lucene(TM)的开源搜索引擎
Luncene是最全面、先进和性能最好的搜索引擎库
特点
When a document is stored, it is indexed and fully searchable in near real-time--within 1 second
当文件存储后,就会生成索引并且可以再1秒之内被索引,接近实时处理了。
Elasticsearch uses a data structure called an inverted index that supports very fast full-text searches
ES使用了叫做倒置索引一种结构,这可以支持非常快的全文搜索。
each document is a collection of fields, which are the key-value pairs that contain your data
每个文档是Fields的集合,Field是一种key value对,里面包含了我们的数据。
做什么
除了搜索引擎,它还是:
- 分布式的实时文件存储,每个字段都被索引并可被搜索
- 实时分析的分布式搜索引擎
- 可以扩展到上百台服务器,处理PB级结构化或非结构化数据
怎么用
RESTful API
各种语言的客户端
命令行
ES和普通数据库的类比
其中 【Type】 类型在新版本(7+版本)中被取消,因为这个会导致多个TYPE中出现的同一个关键字重复做索引,降低效率
- 普通数据库有SQL,ES有DSL
- 普通数据库的SELECT和UPDATE操作,ES中有GET方法和PUT方法调用REST对应实现
查询方式参考
检索类型
目录结构
目录 | 配置文件 | 描述 |
---|---|---|
bin | 放置脚本文件,如启动脚本 elasticsearch, 插件安装脚本等 | |
config | elasticserch.yml | elasticsearch 配置文件,如集群配置、jvm 配置等 |
jdk | java 运行环境 | |
data | path.data | 数据持久化文件 |
lib | 依赖的相关类库 | |
logs | path.log | 日志文件 |
modules | 包含的所有 ES 模块 | |
plugins | 包含的所有已安装的插件 | |
repo | Shared file system repository locations. Can hold multiple locations. A file system repository can be placed in to any subdirectory of any directory specified here. | 共享文件系统存储库位置。 可以容纳多个位置。 文件系统存储库可以放置在此处指定的任何目录的任何子目录中。 |
理解 文档、类型、索引
索引(Index)
索引(Index)类似于MySQL中的database
作为使用者不用关系索引的底层物理存储方式,作为集群管理者还是要注意的,
索引在集群中会进行分片,比如下图,一个索引在集群中被分配为3个分片。
然后每个分片都有一个副本。
一个索引中有多个类型(type),相当于MySQL中database下面的table,然后每个table中有多条record,可以认为每条记录对应ES中的一个文档(document)
类型
类似于Mysql中表的概念,一般来说类型表是的是对同一种结构的定义。但是,实际上ES是弱类型的一种查询引擎。在ES 7系列版本中,已经放弃了type,也就是类型的定义。因为这种类型定义影响了效率。
默认的只有一个类型,名字为_doc
文档
文档类似mysql表中的行,在ES中文档是无模式的,也就是说,可以是一个json类型,或者是一个普通的文本类型。
节点和分片
一般情况下,一个index在集群中创建后可能会有5个分片,然后每个分片有一个副本。总共加在一起是十个分片。
然后一个分片中包含的信息如下图:
[图片上传失败...(image-e733d0-1632566094182)]