1. Lucene简介
Lucene是一个成熟的全文检索库,由Java语言编写,具有高性能、可伸缩的特点,并且开源、免费。
Lucene的作者Doug Cutting是资深的的全文检索专家,Lucene最开始发布在他本人的主页上,2001年10月贡献给Apache,成为Apache基金会的一个子项目。
Lucene是一个IR库(Information Retrieval library)。后来才由Shay Banon在其基础上开发了Elasticsearch 。
2. 什么是搜索引擎?
全文搜索引擎
自然语言处理(NLP)、爬虫、网页处理、大数据处理
如谷歌、百度、搜狗、必应等等。
垂直搜索引擎
有明确搜索目的的搜索行为。
各大电商网站、OA、站内搜索、视频网站等。
数据库的组成结构
关系数据库:MySQL、Oracle、SQL Server、PostgreSQL
NoSql:Redis、Memcached、MongoDB
搜索:Elasticsearch、Solr、Splunk
MySQL的索引结构
B-Trees
B+Trees
MySQL索引能解决大数据检索的问题吗?
1、索引往往字段很长,如果使用B+trees,树可能很深,IO很可怕
2、索引可能会失效
3、精准度差
3. Elasticsearch核心概念
(1)节点
每个节点就是一个Elasticsearch的实例
一个节点≠一台服务器
(2)节点角色
master:候选节点
data:数据节点
data_content:数据内容节点
data_hot:热节点
data_warm:索引不再定期更新,但仍可查询
data_code:冷节点,只读索引
Ingest:预处理节点,作用类似于Logstash中的Filter
ml:机器学习节点
remote_cluster_client:候选客户端节点
transform:转换节点
voting_only:仅投票节点
(3)分片
一个索引包含一个或多个分片,在7.0之前默认五个主分片,每个主分片一个副本;在7.0之后默认一个主分片。副本可以在索引创建之后修改数量,但是主分片的数量一旦确定不可修改,只能创建索引
每个分片都是一个Lucene实例,有完整的创建索引和处理请求的能力
ES会自动在nodes上做分片均衡
一个doc不可能同时存在于多个主分片中,但是当每个主分片的副本数量不为一时,可以同时存在于多个副本中。
每个主分片和其副本分片不能同时存在于同一个节点上,所以最低的可用配置是两个节点互为主备。
(4)集群
原生分布式
一个节点≠一台服务器
集群状态
健康值状态
Green:所有Primary和Replica均为active,集群健康
Yellow:至少一个Replica不可用,但是所有Primary均为active,数据仍然是可以保证完整性的。
Red:至少有一个Primary为不可用状态,数据不完整,集群不可用。
健康值检查
_cat/health
_cluster/health
(5)索引
全文检索:索引系统通过扫描文章中的每一个词,对其创建索引,指明在文章中出现的次数和位置,当用户查询时,索引系统就会根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式
倒排索引深入解读
倒排索引的原理
倒排索引的数据结构
倒排索引核心算法
倒排表的压缩算法
FOR:Frame Of Reference
RBM:RoaringBitmap
词项索引的检索原理
FST:Finit State Transducers