ES内部分享
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
1.3 通常的架构
2. 建立索引&查询
2.1 Lucene底层结构
2.1.1 字符串
数据结构: SSTable
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
2.3 关于分词器的作用(Analyzer)
3. SQL&Luke
3.1 SQL
3.2 Luke
4. 参考资料
4.1 Elasticsearch Reference
4.2 中文官方社区
4.3 ElasticSearch源码解析与优化实践
4.4 elasticsearch 权威指南
已经过时
感谢分享!已推荐到《开发者头条》:https://toutiao.io/posts/fv3t0v 欢迎点赞支持!使用开发者头条 App 搜索 334598 即可订阅《aotian的独家号》