商品搜索

222 阅读2分钟

倒排索引

搜索的核心要求是全文匹配,倒排索引以单词作为索引的key,对应的值是一个商品记录id的列表。

使用es来存储商品记录,es首先会对需要搜索的字段进行分词,把一段连续的文本按照语义拆分成多个单词,然后es按照单词来给商品记录做索引,就形成了倒排索引。

在搜索的时候,es也会对关键词进行分词,然后es会在倒排索引中去搜索我们输入的每个关键词分词。

构建商品索引

在 ES 里面,数据的逻辑结构类似于 MongoDB,每条数据称为一个 DOCUMENT,简称 DOC。DOC 就是一个 JSON 对象,DOC 中的每个 JSON 字段,在 ES 中称为 FIELD,把一组具有相同字段的 DOC 存放在一起,存放它们的逻辑容器叫 INDEX,这些 DOC 的 JSON 结构称为 MAPPING。这里面最不好理解的就是这个 INDEX,它实际上类似于 MySQL 中表的概念,而不是我们通常理解的用于查找数据的索引。

es和数据库对照关系:

image.png

ES 本质上是一个支持全文搜索的分布式内存数据库,特别适合用于构建搜索系统。ES 之所以能有非常好的全文搜索性能,最重要的原因就是采用了倒排索引。倒排索引是一种特别为搜索而设计的索引结构,倒排索引先对需要索引的字段进行分词,然后以分词为索引组成一个查找树,这样就把一个全文匹配的查找转换成了对树的查找,这是倒排索引能够快速进行搜索的根本原因。

前缀索引考虑:suggestion api,非前缀索引考虑:Ngram


此文章为3月Day6学习笔记,内容来源于极客时间《后端存储实战课》