第二章:ElasticSerch 基本概念

es
是一种搜索引擎软件

搜索就是查询

和关系型数据库对比
如goods 商品表
id    title                       sell_point
1001    华为p30手机黑色     4.5英寸

select  * from goods where title like "%华为%"
1、假如 我们给 title  加上索引   但是like  左边加上 通配符后 索引会失效。意味着 全表扫描 如果有一亿个商品 那么效率很低。

模糊查询可能造成全表扫描

2、select  * from goods where title like "%华为手机%"   这样是查询不出来的,必须要 华为和手机分开查。
但是es就能实现。
关系型数据库功能弱。

那么es是如何解决刚才的 两个问题的 :性能低  功能弱。

1、倒排索引:就是将文本内容进行分词形成词条 然后记录词条和数据的唯一标识的对应关系。
    首先将一段文本按照一定的规则拆分成不同的词条term。
如:床前明月光   拆分为  :床前    明月    光

反向倒排索引
key (词条term)=>value(存储内容)
床=》床前明月光
前=》床前明月光
床前=》床前明月光
明=》床前明月光
月=》床前明月光
明月=》床前明月光
光=》床前明月光
月光=》床前明月光

上面的value(存储内容)数据量很大其实只需要放 id就行了

es 存储数据和搜索原理:

索引库:index 它其实就相当于关系型数据库中的 数据库。
数据叫做文档:document 他就相当于我们关系型数据库中的 表里面的一行一行的数据。

在es中文档的数据结构其实就是json的数据格式

如:{
“id”:"1",
  "title":"华为p30手机",
  “price”:3980.00
}
{
“id”:"2",
  "title":"三星GNX手机",
  “price”:3980.00
}
{
“id”:"3",
  "title":"红米4g手机",
  “price”:3980.00
}

如果 我们需要对 title 进行分词:具体分词规则是什么 是由es来完成的。

形成的倒排索引如下:
key      value
华为     1
p30     1
手机    1,2,3
手    1,2,3
机    1,2,3
三星    2
GNX   2
红米    3
4g     3

index 索引库存储了 文档和 文档分词后的 倒排索引库。

es 搜索:

它是通过 倒排索引 来搜索

如:我们要搜索“手机"这个词
第一步 es会拿着这个 “手机这个词” 去倒排索引中去匹配。

匹配到了 就会根据 对应的id去把文档找到 返回给用户

假设:词条数据量很大  恰好要查询的词条再最后面 怎样处理?查询数据岂不是依然很慢。

es帮我们解决了 那就是 对词条进行排序 形成一个树形的数据结构(请自行补 数据结构算法知识),这样提升词条的 速度。

1、这样 关系型数据中 的查询性能低的问题 es给我们解决了。

2、假如要查询 "华为手机" 这样一个词条呢  这样没有词条匹配 岂不是查询不出来吗?
   
es的解决方案是 先分词 再查询:如将分为:"华为","手机" :es自动去分的不用去干预

通过华为 找到文档1 ,通过手机找到 1,2,3.
然后对结果集求交集 不就查出来了吗。


ElasticSerch 的概念

ElasticSerch 是一个基于Lucenne (撸神)的搜索服务器
Lucenne 是什么:他是一套基于搜索的API,如果我们要基于Lucenne来写搜索也是可以的 但是实现起来很麻烦,需要对搜索的细节都要了解 如分词要自己写。
Lucenne :实现了它的两个比较好的应用 就是 ElasticSerch 和Solr(出来的时间比es早),但是ElasticSerch 性能比他高。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值