Fork me on GitHub

ES内部分享

1. ES简介

ElasticSearch是Elastic公司开发的开源分布式搜索引擎

  • 开源
  • 分布式
  • 全文检索
  • OLAP(结合kibana使用)
  • Resful API
  • NoSQL database

1.1 和Lucene的关系

{
  "name": "uf_-1wJ",
  "cluster_name": "UT",
  "cluster_uuid": "xvGp84DyQVOSxLXP43oDpA",
  "version": {
    "number": "6.2.4",
    "build_hash": "ccec39f",
    "build_date": "2018-04-12T20:37:28.497551Z",
    "build_snapshot": false,
    "lucene_version": "7.2.1",
    "minimum_wire_compatibility_version": "5.6.0",
    "minimum_index_compatibility_version": "5.0.0"
  },
  "tagline": "You Know, for Search"
}

简单而言,ES是Lucene的分布式版本,当然扩充了接口和在线分析功能

1.2 基本概念

1.2.1 索引层面
  • index
  • type
  • doc
  • term
1.2.2 倒排索引

正常顺序
doc -> term

term -> term

1.2.2 集群层面

Cluster
Node
Shard
Segment

多种角色
1) Master-eligible node
2)Data node
3) Ingest node
4) Tribe node
5) coordinating node

屏幕快照 2018-12-20 上午11.15.50.png-230kB

1.3 通常的架构

5c17403484ecc.png-39.1kB

2. 建立索引&查询

2.1 Lucene底层结构

2.1.1 字符串

数据结构: SSTable

lucene底层结构

2.1.2 数值型

数据结构: Block K-D tree

1) 时间类型字段
2)数值型字段的存储(float、double、integer、long)
3) 多维向量

2.2 查询语法

Lucene查询语法

age:[10,20] AND name:李四

ES的查询语法

{
    "from": 0,
    "size": 200,
    "query": {
        "bool": {
            "must": [{
                    "range": {
                        "age": {
                            "from": 10,
                            "to": 20
                        }
                    }
                },
                {
                    "match": {
                        "name": "李四"
                    }
                }
            ]
        }
    }
}
{
    "query": {
        "query_string" : {
            "query" : "age:[10,20] AND name:李四"
        }
    }
}
{
    "query": {
        "wildcard": {
            "name": {
                "value": "王*"
            }
        }
    }
}

term/match 的区别

2.3 查询过程

query and fetch
image_1cv4sh7ko16hl1ojf5kcdjk90c12.png-37kB

2.3 关于分词器的作用(Analyzer)

3. SQL&Luke

3.1 SQL

3.2 Luke

image_1cv4s6rodlto7d41b4pjii1295l.png-287.5kB

4. 参考资料

4.1 Elasticsearch Reference

4.2 中文官方社区

4.3 ElasticSearch源码解析与优化实践

s29931477.jpg-47.6kB

4.4 elasticsearch 权威指南

已经过时

4.5 Lucene实战

images.jpeg-23.3kB


请我喝瓶饮料

微信支付码

1 对 “ES内部分享”的想法;

  1. 感谢分享!已推荐到《开发者头条》:https://toutiao.io/posts/fv3t0v 欢迎点赞支持!使用开发者头条 App 搜索 334598 即可订阅《aotian的独家号》

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注