1.1 es引言
举个例子,列如淘宝,搜索“壳手机”,注意我搜的是“壳手机”,不是“手机壳”

假设使用数据库,select * from commodity where name like ”%壳手机%“
这里有两个问题:
1、like“%壳手机%” , %%关键词全表检索,试想遍历类似淘宝海量数据,效率感人
2、用户很有可能想要的是 手机壳,但是输入了壳手机,用like搜索是不会匹配到“手机壳”d的结果的
当然真实的淘宝检索远比上面描述的要复杂,问题也更多。es的出现,完美的解决了检索的问题。
1.2 es介绍
Elastic Search , 简称ES,是一个基于Lucene,使用java语言编写的搜索引擎框架。ES支持分布式全文搜索,提供了restful风格的操作接口,对多种开发语言提供了API。
Lucene,apache顶级项目,官网lucene.apache.org,solr也是基于lucene的搜索实现。
分布式,突出其横向扩展能力。
全文检索,倒排索引,将文档分词存储,对关键词分词后搜索匹配。
应用广泛,不胜枚举,广泛用于搜索场景、大数据分析场景。
1.3 es和solr的区别
1、es对于实时动态数据的搜索支持优于solr,solr对于不变数据的分析性能更优
2、如果需要搭建集群,solr需要依赖zookeeper,es本身支持集群
3、solr国内的社区文档完善程度不及es,es文档十分健全
4、es不止于搜索,对云计算、大数据同样支持特别好
1.4 倒排索引
假设有4条数据,id,内容
|
id |
内容 |
|
1 |
手机壳 |
|
2 |
小米手机壳 |
|
3 |
苹果手机壳 |
|
4 |
我有小米手机 |
倒排索引,分词库
|
分词 |
id |
|
手机壳 |
1,2,3 |
|
手机 |
1,2,3,4 |
|
壳 |
1,2,3 |
|
小米 |
2,4 |
|
苹果 |
3 |
|
我 |
4 |
|
有 |
4 |
搜索实现:
1、将存放的数据,以必定的规则进行分词,并将分词结果保存到分词库
2、用户查询时,现将用户查询的关键词进行分词
3、将查询关键词分词结果去分词库中匹配,拿到匹配结果
4、根据匹配结果去数据存放位置取数据
1.5 kibana
Kibana是用于Elasticsearch的源可用数据可视化仪表板软件,常用菜单有:
1、devTools:左侧倒数第三,小扳手,编写restful的操作请求
2、management:倒数第一,查看索引信息

1.6 ik分词器

默认分词,调用standard分词器

ik分词,调用ik_smart分词器

ik分词支持两种分词模式
- ik_max_word: 会将文本做最细粒度的拆分,会穷尽各种可能的组合
- ik_smart: 会做最粗粒度的拆
1.7 es的结构
索引(index)、分片、备份
- es可以创建多个索引
- 每个索引默认5个分片
- 每个分片至少有1个备份分片,集群中,es会自动把备份放到不同的机器
- 备份分片一般不参与检索,在检索压力大的时候才会参与检索数据
类型(type):7.*版本后,一个索引只支持一个类型(1个类型≈数据库中的1个表)
文档(doc):一个类型下,可以有多个文档(1个文档≈数据库表的一行记录)
属性(field):一个文档中,可以包含多个属性(1个属性≈表中一行记录的一列)




















- 最新
- 最热
只看作者