基于Lucene(是一个非常高效的全文检索引擎框架)
使用场景:大数据搜索,全文检索,聚合计算
特点:近实时搜索
全文检索工具对比?
lucenen:
solr:适用于传统搜索应用,es适用于互联网应用,实时搜索更强
核心概念:
索引index:关系型数据库中的databse
类型type:Table
文档document:row
字段field:text\keyword\byte:列
映射Mapping:Schema
查询方式DSL:类似于SQL,(新版本也支持sql)
分片sharding和副本replicas:分片将数据水平划分,副本达到高可用
原理:
分词做索引
倒排索引原理:
分词——》去重——》排序
正排索引根据ID找内容,倒排索引根据内存找ID
如何进行中文分词?有哪些分词器?
内置了一些分词器,只对中文进行分词
IK分词器:内置词库,并可以自己维护
数据写入的内部流程?
1、客户端往服务器写数据时,可以连接任一节点,该集群节点就作为一个协调节点
2、hash计算该数据存入哪个sharding
3、协调节点进行路由,将请求转发给对应的主sharding所在的服务器节点
4、目标sharding处理请求,写入数据到索引库,并且将数据同步到replica sharding中
5、返回响应
搜索原理?
1、协调节点接收到请求
2、将查询请求广播到所有数据节点,各自执行查询逻辑
3、各个数据节点进行查询之后,将符合条件的数据放到一个队列中,并把数据的文档ID、节点信息、分片信息都返回给协调节点
4、协调节点将所有的结果进行汇总、排序
5、 协调节点向查到结果的分片发送get请求,对应的分片将文档数据发送给协调节点,协调节点将数据整合发送给客户端