Elasticsearch 中的集群、节点、索引、文档、类型
- 集群是一个或多个节点(服务器)的集合,它们共同保存您的整个数据,并提供跨所有节点的联合索 引和搜索功能。群集由唯一名称标识,默认情况下为“elasticsearch”。此名称很重要,因为如果节点设置为按名称加入群集,则该节点只能是群集的一部分。
- 节点是属于集群一部分的单个服务器。它存储数据并参与群集索引和搜索功能。
- 索引就像关系数据库中的“数据库”。它有一个定义多种类型的映射。索引是逻辑名称空间,映射到一 个或多个主分片,并且可以有零个或多个副本分片。 MySQL =>数据库 Elasticsearch =>索引
- 文档类似于关系数据库中的一行。不同之处在于索引中的每个文档可以具有不同的结构(字段),但 是对于通用字段应该具有相同的数据类型。 MySQL => Databases => Tables => Columns / Rows Elasticsearch => Indices => Types =>具有属性的文档
- 类型是索引的逻辑类别/分区,其语义完全取决于用户。
什么是倒排索引
一切设计都是为了提高搜索的性能
倒排索引(Inverted Index)也叫反向索引,有反向索引必有正向索引。通俗地来讲,正向索引是通过key找value,反向索引则是通过value找key。
倒排索引是搜索引擎的核心。搜索引擎的主要目标是在查找发生搜索条件的文档时提供快速搜索。ES
中的倒排索引其实就是 lucene 的倒排索引,区别于传统的正向索引,倒排索引会再存储数据时将关键词和数据进行关联,保存到倒排表中,然后查询时,将查询内容进行分词后在倒排表中进行查询,最后匹配数据即可.
假设有这么几条数据
ID |
Name |
Age |
Sex |
1 |
Kate |
24 |
Female |
2 |
John |
24 |
Male |
3 |
Bill |
29 |
Male |
ID是Elasticsearch自建的文档id,那么Elasticsearch建立的索引如下: |
|||
Name: |
|||
Term |
Posting List |
||
– |
– |
||
Kate |
1 |
||
John |
2 |
||
Bill |
3 |
||
Age: |
Term |
Posting List |
24 |
[1,2] |
29 |
3 |
Sex:
Term |
Posting List |
Female |
1 |
Male |
[2,3] |
Posting List
Elasticsearch分别为每个field都建立了一个倒排索引,Kate, John, 24, Female这些叫term,而[1,2]就是Posting List。Posting list就是一个int的数组,存储了所有符合某个term的文档id。
通过posting list这种索引方式似乎可以很快进行查找,比如要找age=24的同学,爱回答问题的小明马上就举手回答:我知道,id是1,2的同学。
elasticsearch-head chrome插件安装
elasticsearch-head是一个用于浏览Elastic Search集群并与之交互的 Web 前端。
下载,也可通过谷歌商城直接下载
安装好后点开插件
kibana安装
Kibana 是一个免费且开放的用户界面,能够让你对 Elasticsearch 数据进行可视化,并 让你在 Elastic Stack 中进行导航。你可以进行各种操作,从跟踪查询负载,到理解请求如 何流经你的整个应用,都能轻松完成。
下载
修改config/kibana.yml文件
# 默认端口
server.port: 5601
# ES 服务器的地址
elasticsearch.hosts: ["http://localhost:9200"]
# 索引名
kibana.index: ".kibana"
# 支持中文
i18n.locale: "zh-CN"
Windows 环境下执行 bin/kibana.bat 文件
最后:通过浏览器访问 : http://localhost:5601
可以通过控制台跳过 cURL 并使用此 JSON 接口直接处理数据。