Es 总结

Es 总结

什么是分片?

# put a1/doc/1
 -  a1 索引下 创建了5个主分片, 每一个主分片对应一个复制分片

es 如何处理分页?

 - from / size

elsaticsearch 和 lucene 的区别

- lucene : 是搜索引擎库
- es 封装了lucene , 把所有的复杂操作,通过restful 规范 ,以接口的形式抛出

为什么使用es

-  查询速度快

如何使用python查询elasticsearch中有多少个索引?

from elasticsearch import  Elasticsearch

es = Elasticsearch()

# 1. 查询 es集群中有多少 索引库
print(es.cat.indices())
print(es.cat.indices(format='json')) # json化
print(len(es.cat.indices(format='json'))) # json化

如何使用 python 将10G的数据 写入到es中

- 批量写入 helper.bulk(es,actions)
	# es 是 es索引库对象
	# actions 是包含 数据 集合/生成器/列表等,可迭代的数据类型, 
	
    '''
        # 批量插入
        # 1. 通过 helper.bulk来批量创建数据
        # 2. 将所有的数据定义成字典形式,包含:
            # 2.1 _index 对应的索引名称 , 该索引必须存在
            # 2.2 _type 对应类型名称
            # 2.3 _source 对应的字典内,每一篇文档的字段和值

    :return:
    '''

    action = [
        {
            "_index":"t2",
            "_type":"doc",
            "_source":{
                "title":i
            }
        }
    for i in range(1000)]

    helpers.bulk(es,action)

    
 # 不采用多线程的方式, 确保数据安全,不会丢失

说一下复制分片的作用

*** - 高可用, 相当于每一台机器上都存了一份备份数据
- 排除一个集群只有一个节点
- 当集群中有多少个节点的时候,es会自动的将主复分片分开

es优化

- 适当的调大系统打开文件的最大数, 默认是 1024

- 修改配置文件,调整es的jvm的内存大小,一般不超过32G. java中存在 `指针压缩` 的技术, jvm的内存越大,指针越大,导致消耗的资源也大

- 分片的数量最好设置在 5-20 个内.   
- es的一个分片最多存20G数据 , 分片的数量在创建索引库时就指定好,创建好索引库后不允许修改分片的数量
- 分片设置过多会导致检索的比较慢 , 也会导致检索时打开比较多的文件, 导致服务器之间通信慢.
- 分片数过少会导致`单个分片的索引过大`,也会导致检索数据比较慢. 副本数多可以提升搜索的能力,如果设置的副本数过多,也是对服务器造成额外的压力.因为 分片需要同步. 所以设置2-3个即可

使用路由的优势?

1. 提高检索效率
2. 同类型的数据放在一起
3. 一个索引可以设置多个路由,由多个路由去处理检索或者是新增

如何解决路由导致集群数据偏移问题

# 什么是偏移? 
	- 一个索引上 有A,B,C三个路由. 所有数据都往A上存,B,C路由不存数据的现象

# 怎么解决
	- 限制路由的数量,
		setting配置: "index.routing_partition_size":3

脑裂

# 1. 什么是闹裂?
	- 只出现在集群中
	- 集群由于网络或者其他因素,导致集群一分为二,或更多. 通过 选举算法,分裂的集群可能会产生多个主节点

# 2. 怎么解决?
	- 选举算法限制: 分裂出的机器数量小于 总集群数量的一半+1,不能选举主节点
	

如何在django中使用es

# es 本身就是一个搜索引擎,提高的是查询数据速度

# 1. 当数据存储到数据库之前,整合数据的有用信息和具体的访问url信息,存储到ES中. 目的是快速搜索.
# 2. 当用户想查看具体信息时,可以通过 url, 访问数据库得到更具体的信息
posted @ 2021-05-19 23:05  染指未来  阅读(173)  评论(0编辑  收藏  举报