当前位置: 首页>后端>正文

es 关联表 es 关系型数据库

 

1 响应时间

MySQL
背景:
小刘在做测试时,发现当数据库中的文档数仅仅上万条时,关键词查询就比较慢了。如果一旦到企业级的数据,响应速度就会更加不可接受。

原因:
在数据库做模糊查询时,如LIKE语句,它会遍历整张表,同时进行字符串匹配。

例如,当小刘在数据库查询“市场”时,数据库会在每一条记录去匹配“市场”这两字是否出现。实际上,并不是所有记录都包含“市场”,所以做了很多无用功。

这两个步骤都不高效,而且随着数据量的增大,消耗的资源和时间都会线性的增长。

Elasticsearch
提升:
小刘使用了云搜索服务后,发现这个问题被很好解决,TB级数据在毫秒级就能返回检索结果,很好地解决了痛点。

原因:
华为云云搜索是基于Elasticsearch。而Elasticsearch是基于倒排索引的,例子如下。

es 关联表 es 关系型数据库,es 关联表 es 关系型数据库_搜索,第1张

当小刘搜索“手机”时,Elasticsearch就会立即返回文档F,G,H。这样就不用花多余的时间在其他文档上了,因此检索速度得到了数量级的提升
——————————————————————————————————————————————————————

2 分词

MySQL
背景:
在做中文搜索时,小刘发现组合词检索在数据库是很难完成的。

例如,当用户在搜索框输入“四川火锅”时,数据库通常只能把这四个字去进行全部匹配。可是在文本中,可能会出现“推荐四川好吃的火锅”,这时候就没有结果了。

原因:
数据库并不支持分词。如果人工去开发分词功能,费时费精力。

Elasticsearch
提升:
小刘使用云搜索服务后,就不用太过于关注分词了,因为Elasticsearch支持中文分词插件,很好地解决了问题。

原因:
当用户使用Elasticsearch时进行搜索时,Elasticsearch就自动帮他分好词了。

例如当小刘输入“四川火锅”时,Elasticsearch会自动做下面两件事
(1) 将“四川火锅”分词成“四川”和“火锅”
(2) 查找包含这两个词的文档
——————————————————————————————————————————————————————

3 相关性

MySQL
背景:
在用数据库做搜索时,结果经常会出现一系列文档。小刘不禁思考:
· 到底什么文档是用户真正想要的呢?
· 怎么才能把用户想看的文档放在搜索列表最前面呢?

原因:
数据库并不支持相关性搜索。

例如,当用户搜索“咖啡厅”的时候,他很可能更想知道附近哪里可以喝咖啡,而不是怎么开咖啡厅。

Elasticsearch
提升:
小刘使用了云搜索服务后,发现Elasticsearch能很好地支持相关性评分。通过合理的优化,云搜索服务能够返回精准的结果,满足用户的需求。

原因:
Elasticsearch支持全文搜索和相关度评分。这样在返回结果就会根据分数由高到低排列。分数越高,意味着和查询语句越相关。

例如,当用户搜索“星巴克咖啡”,带有“星巴克咖啡”的信息就要比只包含“咖啡”的信息靠前。
——————————————————————————————————————————————————————

4 可视化界面

MySQL
背景:
在使用数据库进行查询数据时,很多时候都是通过工程代码或者命令端完成。小刘发现很多时候分析结果并不太方便,缺少一个可视化界面来提高效率。

原因:
数据库自身通常不带可视化界面。而在完成搜索相关的任务时,常常需要根据搜索结果来进行分析。

Elasticsearch
提升:
小刘使用了云搜索服务后,发现可视化Kibana界面提升了研发的速度。

原因:
Kibana可视化界面完美支持Elasticsearch。研发人员能够在上面快速地进行概念验证,分析结果,提高开发效率。




https://www.xamrdz.com/backend/3c21938782.html

相关文章: