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 -> doc

1.2.2 集群层面

Cluster Node Shard Segment

多种角色

  1. Master-eligible node 2)Data node
  2. Ingest node
  3. Tribe node
  4. 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)
  2. 多维向量

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


请我喝瓶饮料

微信支付码