跳转至

ElastiSearch

ElasticSearch

数据库

数据分析平台

Document APIs

RDBMS Elastic Search
Database index
Table ~~Type~~
Row Document
Column Field
Schema Mapping
Index Everything is indexed
SQL DSL
SELECT * FROM table ... GET Index/_doc/doc_name {filter}
UPDATE table SELECT ... PUT Index/_doc/doc_name {data}

RMDS(关系型数据库): 事务性 / Join

ElasticSearch: 相关性(Score)/ 高性能全文检索

Index 索引,一类文档的集合

每个索引都有自己的 Mapping 定义,定义文档字段类型(string, number, list, object)

7.0 以前,一个 Index 可以配置多个 Types

6.0 开始,Type 已经被废除

7.0 开始,一个索引只能创建一个 Type - "_doc"

Removal of types

Mapping Type 由 Lucence field 决定,不同 Type 中的相同文档字段会共享同一个 Mapping.

加入我需要删除 A Type 中的 user_name 字段而保留 B Type 中的 user_name 字段,这就会引起歧义。同时也会影响 Lucence 压缩文档的性能

替代解决办法

直接添加Type字段

PUT twitter
{
  "mappings": {
    "_doc": {
      "properties": {
        "type": { "type": "keyword" },
        "name": { "type": "text" },
        "user_name": { "type": "keyword" },
        "email": { "type": "keyword" },
        "content": { "type": "text" },
        "tweeted_at": { "type": "date" }
      }
    }
  }
}

PUT twitter/_doc/user-kimchy
{
  "type": "user",
  "name": "Shay Banon",
  "user_name": "kimchy",
  "email": "shay@kimchy.com"
}

PUT twitter/_doc/tweet-1
{
  "type": "tweet",
  "user_name": "kimchy",
  "tweeted_at": "2017-10-24T09:00:00Z",
  "content": "Types are going away"
}

GET twitter/_search
{
  "query": {
    "bool": {
      "must": {
        "match": {
          "user_name": "kimchy"
        }
      },
      "filter": {
        "match": {
          "type": "tweet"
        }
      }
    }
  }
}

Bulk API

支持在一次 API 调用中,对不同的索引进行操作

集群

节点: 一个 ElasticSearch 实例

Master-eligible nodes

Master Node

集群状态:Cluster Status

Data Node 数据节点

Coordinating Node,处理客户端请求,集群每个节点都起到 Coordinating Node 的作用,应对高并发

分片:一个 Lucence 实例,解决数据水平扩展问题,解决数据高可用问题(读取的吞吐,IO)

倒排索引

正排索引:目录,文档ID到文档内容

倒排索引:索引页,单词到文档ID的索引

https://zh.wikipedia.org/wiki/%E5%80%92%E6%8E%92%E7%B4%A2%E5%BC%95