搜索是无处不在的,也很少有网站不提供搜索功能了,所以我们需要一个搜索的模块,但是搜索背后的实现,我们可以只用SQL的LIKE做出来,也可以很复杂,复杂到什么程度呢?可能专门搜索的团队,一个团队有上千人
我们说一下一个小团队,如何利用ES来构建一个低成本高性能的搜索系统
ES的倒排索引
既然SQL的Like也能实现,那么为何需要ES来出现呢?搜索的核心是全文匹配,数据库的全文匹配会很慢
于是需要ES,而ES如何解决搜索问题的呢?ES利用了一种特殊的索引,在ES中,在其中,我们将单词作为索引的Key,Value是ES自己的ID,(DOCID)
这个倒排索引在ES写入数据的时候,就进行了分词和拆分为多个单词,然后根据单词来进行形成单排索引
我们搜索苹果手机的时候,就会进行分词,分为苹果和手机,以及苹果手机,那么搜索出来之后
然后根据相关度进行一个排序
搜索的效果相当不错
对于简单的ES中存储的构建
虽然ES是为了搜索而生的,但本质上是一个存储系统,ES中的一些概念,基本如下
ES中的每个数据称为一个DOCUMENT,DOC就是一个JSON,DOC中的每个字段称为一个FIELD,把具有相同字段的DOC存放在一起,存放的逻辑容器叫做INDEX,DOC的JSON结构称为Mapping