Apache Lucene是ES的“地基”?

南风 2020年10月16日 144次浏览

 上回说到为什么ES能够很好的做全文检索,而MySQL等普通关系型数据库不行,请注意是不行而不是不能,那我们来说说普通关系型数据库为什么不行,普通关系型数据库的索引时B+数据,尤其擅长精确匹配的快速查找,而对于大篇幅的全文智能做模糊检索,模糊检索时必须做全表扫描,除此之外最恐怖的还是对单个长字段的左右LIKE,脑补下使用正则表达式做长篇幅文章匹配的场景,你就自然明白为什么它不行。那为啥ES可以做到呢?

一、Lucene如何做一个全文检索引擎?

建倒排索引流程.png

上面的流程是创建一个全文检索引擎的索引(Index)

二、Lucene倒排索引是何许物也?

 搜索引擎中每个文件都对应一个文件ID,文件内容被表示为一系列关键词的集合(实际上在搜索引擎索引库中,关键词也已经转换为关键词ID)。例如“文档1”经过分词,提取了20个关键词,每个关键词都会记录它在文档中的出现次数和出现位置。
倒排索引结构图.png

倒排索引的作用的在海量全文文档中检索用户搜索的部分词短语对应的原文档ID,从而检索出所需文档信息。

三、Lucene啥检索文档的呢?

 Lucene接收到一搜索短语,根据配置是否需要分词器对搜索词分词等逻辑,对搜索进行预处理,后查询倒排表进行文档过滤,获取最终的检索结果文档。
查倒排索引流程.png

其实对于搜索引擎而言,最具价值的当属分词器的词库,这是快速识别用户意图给与反馈的基础,一个垂直搜索没有强大的词库就不能给用户良好的搜索体验,用户自然不会使用。有了强大的词库之后,才能构建知识图谱,对用户进行检索意图识别以及内容推荐。

(全文完)