2.1 文档(Document)

  • ElasticSerach 是面向文档的,文档是所有可能搜索数据的最小单位
    • 日志文件中的日志项目
    • 一部电影的具体信息
    • MP3播放器的一首歌曲/一片PDF文档中的具体内容
  • 文档会被序列化成JSON格式,保存在ElasticSerach中
  • 每个文档都有Unique ID,可以自己生成或由ES生成

2.1.1 文档的元数据

image.png

2.2 索引(Index)

image.png

索引的不同语义

image.png

2.3 类型(Type)

image.png

抽象类比
image.png

2.4 Mapping

2.4.1 什么是Mapping

  • Mapping类似于数据库的schema的定义,作用:
  1. 定义索引的字段名称
  2. 定义字段的数据类型,例如字符串,数字,布尔等
  3. 字段,倒排索引的相关配置
  • Mapping会把JSON文档映射成Lucene所需的扁平格式
  • 一个Mapping属于一个索引的Type
  1. 每个文档都属于一个Type
  2. 一个Type有一个Mapping定义
  3. 7.0开始,不需要在Mapping定义中指定type信息

    2.4.2 字段的数据类型

  • 简单类型
    • Text/Keyword
    • Date
    • Integer / Floating
    • Boolean
    • IPv4 / Ipv6
  • 复杂对象类型
    • 对象类型 / 嵌套类型
  • 特殊类型
    • geo_point & geo_shape / percolator(过滤器)

      2.4.3 Dynamic Mapping

      在写入文档时,如果索引不存在会自动创建索引,DynamicMapping机制使得我们不用自己手动创建Mappings,ES会根据文档信息推算出字段类型,但是有些时候推算也会不准,例如地理信息位置

      1. 类型自动是列

      image.png image.png

      image.png

      2.4.4 如何显示定义Mapping

      1. PUT movies
      2. {
      3. "mappings" :{
      4. // define mapping
      5. }
      6. }
      ```bash DELETE users

index-控制当前字段是否被索引,如果为false则该字段不可以被搜索

PUT /users { “mappings”: { “properties”: { “user”: { “type”: “text” }, “component”: { “type”: “text”, “index”: false }, “mobile”: { “type”: “text” } } } }

PUT users/_doc/1 { “user”:”SmallWolf”, “component”: [“hello”,”world”], “mobile”:”1888888888” }

GET users/_search { “query”: { “match”: { “component”: “hello” } } }

  1. <a name="U22Hc"></a>
  2. ## 2.4.5 Index Options
  3. - 四种不同级别的Index Options配置,可以控制倒排索引的内容
  4. - docs - 记录docid
  5. - freqs - 记录docid和term frequencies
  6. - positions - 记录docid和term frequencies和term position
  7. - offsets - 记录docid和term frequencies和term position和character offects
  8. - Text类型默认为position,其它默认docs
  9. - 记录内容越多,占用存储空间越大
  10. ```bash
  11. PUT /users
  12. {
  13. "mappings": {
  14. "properties": {
  15. "user": {
  16. "type": "text"
  17. },
  18. "component": {
  19. "type": "text",
  20. "index_options": "offsets"
  21. }
  22. }
  23. }
  24. }

2.4.5 copy_to设置

image.png

2.4.6 数组类型

ES中不提供专门的数组类型。但是任何字段,都可以包含多个相同类型的数值

2.4 节点、集群、分片及副本

  • 高可用:服务可用性-允许有节点停止服务、数据可用性-部分节点丢失,不会丢失数据
  • 可扩展性:请求提升/数据不断增长 可以将数据分布到不同的节点中