Python做个搜索引擎(3)ElasticSearch数据库设计【20201006】

发表于 2020-10-06 12:06:55
阅读 136

介绍

介绍

我们已经设计好了搜索引擎的MySQL数据库,今天我们要开始设计ElasticSearch数据库了。

ElasticSearch数据库在这个搜索引擎项目里的作用是全文检索,因为MySQL无法实现这个功能。而搜索引擎的特点是用户给出一个查询关键字,我们根据这个关键字进行全文匹配查找符合条件的文档出来返回给用户。也就是说我们只需要考虑用户给的关键字需要匹配哪些数据就可以知道如何设计ElasticSearch数据库了。

ElasticSearch和MySQL不一样,它是由一个一个的数据集组成的,每个数据集之间是独立的,我们的搜索引擎只需要用到一个数据集即可。

ElasticSearch数据表设计

我们只需要一个数据表即可,所以这里比较简单了。

冗余数据

设计ElasticSearch数据表之前我们需要了解一个概念,叫做——冗余数据。什么是冗余数据?

从字面意思理解,冗余数据就是重复的、多余的数据。那么既然是重复的为什么不干脆丢掉呢?事实上冗余数据是为了简化编程复杂度,提高程序运行效率而设计的。

在数据量达到上100W,上1000万的情况下,如果有一些数据在多个地方都会用到的时候,计算机就需要动态的将多处的数据进行拆解、组合后再将它们展示到用户面前,而这样做的结果会造成系统的繁忙,甚至出现死机情况。

为了解决这个问题,我们就需要将这部分“公用数据”在一些场景下多复制出来一份专门用来在这些场景下展示,这样计算机就可以省去拆解、组合的重复性工作,可以大大提高程序运行效率。

数据表设计

ElasticSearch作为搜索引擎使用,其数据99%都是冗余基础数据库(MySQL之类的关系型数据库)的,这里我们只讨论哪些数据需要进行冗余,哪些则不需要放入ES引擎里面。

设计ElasticSearch的数据表记住以下几个要素:

  • 需要全文匹配的字符串字段(包括char、varchar、text、longtext等等类型的)

  • 需要过滤的整型字段(包括int、smallint、tinyint等等)

  • 需要排序的整型字段(包括int、smallint、tinyint等等)

根据上面的几个要素,福哥整理出来了如下这些字段

全文字段

这个是搜索引擎的核心,我们的项目就是要实现全文搜索的功能的。ElasticSearch搜索引擎会在全部“文本”类型的字段内进行搜索,所以,不是需要进行匹配的字段就不要放进来了。

原字段名webpages.title,新字段名page_title

原字段名webpages.keywords,新字段名page_keywords

原字段名webpages.description,新字段名page_description

原字段名webpages.pageText,新字段名page_text

过滤字段

这里可以针对一些无效数据的字段进行冗余,这里我们简单些只进行基本权重过滤和网页状态判断。

原字段名websites.weight,新字段名page_base_weight

原字段名webpages.statusCode,新字段名page_status_code

排序字段

我们做的是搜索引擎的基本功能,这里的排序规则交给ES自己计算即可,因此,不需要冗余用来排序的字段。

总结

大家可能会觉得今天的课上好像没有操作电脑啊?都是一些理论知识啊?是这样的,因为ES的表不需要实现创建,在我们写入数据的时候会自动进行索引(关于mapping我们今后再学)了。

明天开始我们就要编写代码了,大家要振奋起精神跟上福哥哦~~