前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ElasticSearch教程(三)—— 懂原理

ElasticSearch教程(三)—— 懂原理

作者头像
逝兮诚
发布2019-10-30 18:20:51
3450
发布2019-10-30 18:20:51
举报
文章被收录于专栏:代码人生代码人生

懂原理

集群

集群是有一群配置相同cluster.name的节点组成。它们通过广播通信,所以要放在一个网段的内网。

集群节点和身份

master :master管理集群范围内所有索引,和索引所在节点。当有节点加入和删除时,重新平均分布所有数据。

data :存储文档

集群状态

通过GET /_cluster/health查看集群状态。

代码语言:javascript
复制
{
    "cluster_name": "elasticsearch",
    "status": "yellow",
    "timed_out": false,
    "number_of_nodes": 1,
    "number_of_data_nodes": 1,
    "active_primary_shards": 5,
    "active_shards": 5,
    "relocating_shards": 0,
    "initializing_shards": 0,
    "unassigned_shards": 5,
    "delayed_unassigned_shards": 0,
    "number_of_pending_tasks": 0,
    "number_of_in_flight_fetch": 0,
    "task_max_waiting_in_queue_millis": 0,
    "active_shards_percent_as_number": 50.0
}

主要看的是status,有green,yellow,red三种情况。green是所有主分片和副本分片都在运行,yellow是主分片都在运行,有部分副本副片没有运行,red是有主分片没有运行。

分片内部

索引指向一个或多个物理分片。一节点上可以分配多个分片。一个分片是一个底层的工作单元,它就是一个Lucene实例。一个分片就是一个完整的搜索引擎。它存储实际的数据。分片有两个角色,主分片和副分片。主分片插入修改文档,副分片同步主分片。主副分片都能提供检索功能。

创建一个索引并分配3个主分片,并分配一个副分片。

代码语言:javascript
复制
curl -X PUT "localhost:9200/blogs" -H "content-type:application/json" -d '
{
"settings":{         
"number_of_shards":3,
"number_of_replicas":1
}
} 
' 

分片内部是如何检索文档呢?是用倒排索引。ES的倒排索引,除了特定词项出现的文档列表,还会加上词项出现总次数,词项在文档中的顺序,每个文档的长度,所有文档的平均长度等。

全文检索时,会为所有的文档集合建立一个很大的倒排索引表。这个倒排索引表很大,且不可修改,一旦新的索引就绪,就会替换旧的索引。

不变性:倒排索引是不会能被修改的,这样避免了一下问题。

  1. 多线程修改文档时,需要对文档加锁
  2. 倒排索引一旦加载就会被放入内存中,就会留在那里,只要有内存,大部分读请求直接命中内存,而不会命中磁盘,性能更高。
  3. ES的其他缓存(filter),在倒排索引的有效期内始终有效,不会因为数据的变化而变化,因为数据(倒排索引)是不变的。
  4. 写入单个大数据量的倒排索引允许被压缩。

缺点是倒排索引的不变性,当索引发生修改时,需要重新的重新生成倒排索引,它限制了倒排索引更新的频率。

对于实时,动态的更新倒排索引,实际的方法是用更多的倒排索引,即对于修改的部分,新增一个倒排索引。ES检索倒排索引时,会重最开始的倒排索引一直检索到最后的倒排索引。并把结果最后合并。

这里段是一个很重要的概念。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-09-07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 懂原理
    • 集群
      • 集群节点和身份
      • 集群状态
      • 分片内部
相关产品与服务
Elasticsearch Service
腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档