逻辑设计:

  • 文档 -> 表中的一行
  • 类型 -> 数据表
  • 索引 -> 数据库

image.png

2.1 理解逻辑设计: 文档, 类型和索引

image.png

2.1.1 文档

image.png

一组字段和其值的类型的映射关系组成了 “类型”.

2.1.2 类型

image.png

2.1.3 索引

2.2 理解物理设计: 节点和分片

一个有3个节点的集群, 数据库被划分为5个分片, 每个分片有一个副本:

  • 分片是一个目录中的文件
  • 分片是数据迁移的最小单位

image.png

2.2.1 创建拥有一个或多个节点的集群

1. 当索引一篇文档时发生了什么

这里的 “索引文档” 应该是指插入文档.

  1. 先把文档发到主分片
  2. 再同步文档到副本分片

image.png

2. 搜索索引时发生了什么

搜索是可以搜索主分片和副本分片.

2.2.2 理解主分片和副本分片

一个分片是 Lucene 的索引: 一个包含倒排索引的文件目录.

image.png

image.png

Elasticsearch 索引由一个或多个主分片以及零个或多个副本分片构成:

image.png

副本分片的数量可以随时更改, 但是主分片不能, 在创建时就需要确定主分片的数量, 5个是推荐的.

2.2.3 在集群中分发分片

加节点称为水平扩展.

image.png

2.2.4 分布式索引和搜索

每份分片 (应该指主分片) 拥有相同的散列范围, 接收新文档的机会均等.

  • 然后复制文档到副本分片, 复制成功后响应索引结果

image.png

在搜索的时候, 接受请求的节点将请求转发到一组包含所有数据的分片:

  • round-robin
  • Elasticsearch 从这些分片收集结果并聚集到单一回复

image.png

2.3 索引新数据

使用 cURL:

image.png

2.3.1 通过 cURL 索引一篇文档

  1. $ curl -XPUT 'localhost:9200/get-together/group/1?pretty' -H 'Content-Type:application/json' -d '{
  2. "name": "Elasticsearch Denver",
  3. "organizer": "Lee"
  4. }'
  5. {
  6. "_index" : "get-together",
  7. "_type" : "group",
  8. "_id" : "1",
  9. "_version" : 1,
  10. "result" : "created",
  11. "_shards" : {
  12. "total" : 2,
  13. "successful" : 1,
  14. "failed" : 0
  15. },
  16. "_seq_no" : 0,
  17. "_primary_term" : 1
  18. }

2.3.2 创建索引和映射类型

1. 手动创建索引

  1. $ curl -XPUT 'localhost:9200/new-index'
  2. {"acknowledged":true,"shards_acknowledged":true,"index":"new-index"}

2. 获取映射

获取表结构:

  1. $ curl 'localhost:9200/get-together/_mapping/group?pretty&include_type_name=true'
  2. {
  3. "get-together" : {
  4. "mappings" : {
  5. "group" : {
  6. "properties" : {
  7. "name" : {
  8. "type" : "text",
  9. "fields" : {
  10. "keyword" : {
  11. "type" : "keyword",
  12. "ignore_above" : 256
  13. }
  14. }
  15. },
  16. "organizer" : {
  17. "type" : "text",
  18. "fields" : {
  19. "keyword" : {
  20. "type" : "keyword",
  21. "ignore_above" : 256
  22. }
  23. }
  24. }
  25. }
  26. }
  27. }
  28. }
  29. }

2.3.3 通过代码样例索引文档

2.4 搜索并获取数据