ElasticSearch 01 -- 入门

1. 介绍

ElasticSearch,简称ES,是java开发的一个开源的、高扩展的、分布式的全文搜索引擎服务器

所以说它是一个单独的软件,可以提供跟百度、谷歌一样的搜索功能

官网地址:免费且开放的搜索:Elasticsearch、ELK 和 Kibana 的开发者 | Elastic

1. 为什么使用ES

传统的数据库查询,假如现在有一个商品表

需求1:从 title 获取包含“手机”的数据

select * from goods where title like '%手机%'

这个sql存在的问题:

  • 使用like时,以‘%’开头,会导致索引失效,这时候全表扫描,效率低
    而且,如果表中数据太多,比如:1亿条,假设1秒钟查询十万,也需要1000秒,速度慢

需求2:从 title 获取包含“华为手机”的数据

select * from goods where title like '%华为手机%',这个sql根本就查不出来

总结,使用数据库查询

  • 效率低
  • 功能弱

ES能解决这些的问题

2. 两种索引

假设有一本古诗集,包含

《静夜思》
窗前明月光,疑是地上霜。
举头望明月,低头思故乡。

《水调歌头》
明月几时有?把酒问青天。
不知天上宫阙,今夕是何年?
.....

《月下独酌四首》
花间一壶酒,独酌无相亲。
举杯邀明月,对影成三人。
.....

需求:找出这本书中包含“明月”的古诗

1. 正向索引

搜索逻辑:先看《静夜思》里有没有“明月”,有就记录,再看《水调歌头》里有没有“明月”,有就记录。。。。

就这样一首一首的判断下去,很明显效率很慢

2. 反向索引

又称:倒排索引,按照规则,对文本内容进行分词,拆分出不同的词条(term)

比如:床前明月光,就可能分成:床前、明月、光、月光等词条

所以它最终的索引结构:

这样就能根据“明月”快速的查询到对应古诗

总结:倒排索引,对文档内容进行分词,最终得出词条和文档唯一标示(文档id)的对应关系

3. ES的存储和搜索原理

ES中存在文档、索引库着两个概念

  • 文档经过分词后存到索引库ES中的文档是json
  • 索引库存储着词条跟文档的对应关系,并向用户提供搜索服务

倒排索引建立的过程:

  • id=1 的数据第一个存进来,分词后
  • 然后 id=2 的数据进来,分词后:三星、移动、4G、手机
    • 三星、移动、4G是新增的词条,手机是已存在的词条

就这样文档以倒排索引的方式存放到索引库

同时也会对词条进行处理,形成树形结构,有点儿类似数据库中跟某个字段建立索引,目的是提高查询速度

查询时,如果用户输入“华为手机”

  • 先分词为:华为、手机
  • 根据这两个词条分别查询
  • 最后汇总结果,反馈用户

4. ES和Mysql区别

  • mysql有事务,ES没有
  • ES没有外键,如果数据一致性要求高,还是要用Mysql

总结:mysql存储数据,ES搜索数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值