搜索引擎 - ES

ES集群有哪些类型的节点,以及节点对应的职责是什么?

主要有Master节点和DataNode节点。

Master节点主要负责:
管理索引(创建索引、删除索引)、分配分片
维护元数据
管理集群节点状态
不负责数据写入和查询,比较轻量级。
在Elasticsearch集群中,会有N个DataNode节点。DataNode节点主要负责:
数据写入、数据检索,大部分Elasticsearch的压力都在DataNode节点上
在生产环境中,内存最好配置大一些

 ES文档写入原理?

1.选择任意一个DataNode发送请求,例如:node2。此时,node2就成为一个coordinating node(协调节点)。
2.计算得到文档要写入的分片。
 `shard = hash(routing) % number_of_primary_shards`。
 routing 是一个可变值,默认是文档的 _id。
3.coordinating node会进行路由,将请求转发给对应的primary shard所在的DataNode(假设primary shard在node1、replica shard在node2)。
4.node1节点上的Primary Shard处理请求,写入数据到索引库中,并将数据同步到Replica shard。
5.Primary Shard和Replica Shard都保存好了文档,返回client。

ES检索原理?

client发起查询请求,某个DataNode接收到请求,该DataNode就会成为协调节点(Coordinating Node)
协调节点(Coordinating Node)将查询请求广播到每一个数据节点,这些数据节点的分片会处理该查询请求
 每个分片进行数据查询,将符合条件的数据放在一个优先队列中,并将这些数据的文档ID、节点信息、分片信息返回给协调节点
 协调节点将所有的结果进行汇总,并进行全局排序
协调节点向包含这些文档ID的分片发送get请求,对应的分片将文档数据返回给协调节点,最后协调节点将数据返回给客户端。

什么是倒排索引? 有什么好处?

索引: 从ID到内容。
倒排索引: 从内容到ID。好处: 比较适合做关键字检索。可以控制数据的总量。提高查询效率。
搜索引擎为什么比MySQL查询快? lucence
文章-》term ->排序 term dictionary -> term index -》 Posting List ->[文章D ,[在文章中出现的偏移量],权重,

相关度算法:TF/IDF.

强平衡二叉树和弱平衡二叉树有什么区别

强平衡二叉树AVL树,弱平衡二叉树就是我们说的红黑树.
1.AVL树比红黑树对于平衡的程度更加严格,在相同节点的情况下,AVL树的高度低于红黑树
2.红黑树中增加了一个节点颜色的概念
3.AVL树的旋转操作比红黑树的旋转操作更耗时.

二又搜索树和平衡二叉树有什么关系?

平衡二叉树也叫做平衡二叉搜案树,是二叉搜案树的升级版,二又搜索树是指节点左边的所有节点都比该节点小,节点右的节点都此该节点大,而平二又搜索树是在二叉搜索的基础上还规定了节点左右两边的子树高度差的绝对值不能超过1.

设计模式有哪些大类,及熟悉其中哪些设计模式

设计模式分为三大类:

1.创建型

a.工厂横式(Factory Pattern)
b.抽象工厂模式(Abstract Factory Pattern)
c单例模式(Singleton Pattern)
d.建造者模式(Builder Pattern)
e.原型模式(Prototype Pattern)

2.结构型

a.适配器模式(Adapter Pattern)
b.桥接模式(Bridge Pattern)
c过滤器模式 (Filter、Criteria Pattern)
d.组合模式(Composite Pattern)
e.装饰器模式(Decorator Pattern)
f.外观模式(Facade Pattern)
g.享元模式(Flyweight Pattern)
h.代理模式(Proxy Pattern)

3.行为型

a.责任链模式(Chain of Responsibility Pattern)
b.命令模式(Command Pattern)
c解释器模式(nterpreter Pattern)
d.迭代器模式(lterator Pattern)
e.中介者模式(Mediator Pattern)
f.备忘录模式(Memento Pattern)
g.观察者模式(Observer Pattern)
h.状态模式(State Pattern)
i.空对象模式(Null Object Pattern)
j.策略模式(Strategy Pattern)
k.模板模式(Template Pattern)
l访问者模式(Visitor Pattern)

遇到过哪些设计模式?

在学习一些框架或中间件的底层源码的时候遇到过一些设计模式:
1.代理模式:Mybatis中用到D动态理来生成Mapper的代理对象,在执行代理对象的方法时会去执SQL,Spring中AOP、包括@oniguration注解的底层实现也都用到了代理模式
2.责任链模式:Tomcat中的Pipeline实现,以及Dubbo中的Filter机制都使用了责任链模式
3.工厂模式:Spring中的BeanFactory就是一种工厂模式的实现
4.适配器模式:Spring中的Bean销毁的生命周期中用到了适配器模式,用来适配各种Bean销毁逻辑的执行方式
5.外观模式:Tomcat中的Request和RequestFacade之间体现的就是外观模式
6.模板方法模式: Spring中的refresh方法中就提供了给子类继承重写的方法,就用到了模板方法模式

ES部署时,要如何进行优化?

1、集群部署优化。
调整ES的一些重要参数。path.data目录尽量使用SSD。定时JVM堆内存大小。
关于ES的参数,大部分情况下是不需要调优的,如果有性能问题,最好的办法是安排更合理的sharding布局并且增加节点数量。
2、更合理的sharding布局
让sharding和对应的replica sharding尽量在同一个机房。
3、Linux服务器上的一些优化策略:
不要用root用户;修改虚拟内存大小; 修改普通用户可以创建的最大线程数
ES生态:ELK日志收集解决方案- filebeat(读log日志)-> logstash -> ElasticSearch -> kibana、 Grafana、自研的报表平台.

ES了解多少? 说说你们公司的ES集群架构。

ES: 是一个基于Lucene框架的搜索引擎产品。you know for search。提供了Restful风格的操作接口。ELK
Lucene: 是一个非常高效的全文检索引擎框架。javajar
ES的一些核心概念:
1、索引index :关系型数据库中的 table
2、文档 document : row
3、字段 field text keyword byte :列
4、映射Mapping : Schema。
5、查询方式 DSL :SQL ES的新版本也支持SQL
6、分片 sharding 和 副本 replicas: index都是由sharding组成的。每个sharding都有一个或多个备份。 ES集群健康状.

match查询?

match查询属于高层查询,会根据你查询的字段的类型不一致,采用不同的查询方式.
如果查询的是日期或者数值的字段,他会自动将你的字符串查询内容转换成日期或者数值对待.

如果查询的内容是一个不能被分词的字段(keyword).match查询不会对你的指定查询关键字进行分词;

如果查询的内容是一个可以分词的字段(text),match会将你指定的查询内容根据一定的方式去分词;

然后去分词库中匹配指定的内容

总而言之: match查询,实际底层就是多个term查询,将多个term查询的结果汇集到一起返回给你。

 

posted @ 2023-03-05 12:19  君莫笑我十年游  阅读(179)  评论(0编辑  收藏  举报