好吧,上周没写完,这周继续写。。。(惭愧!)
计划分为两部分吧:
一篇为应用篇。一篇为原理篇
周末更新
最近,正好做后端搜索相关工作,接触到了 ElasticSearch 相关技术,
顺便整理一下,分享出来。
一部分作为自身技术积累,一部分也休息沉淀了一段时间,想回归一下写博客的状态。
本篇主要分为三部分,你将收获:
1.ElasticSearch 是什么?
2.ElasticSearch 基本原理
3.基于 ElasticSearch 实现一个简单的搜索引擎服务(重点)
一、ElasticSearch 是什么?
A Distributed RESTful Search Engine.
一个分布式的 RESTful 搜索引擎。
简单来说,ElasticSearch(简称:ES)是一个基于 Lucene 的搜索服务器,它提供了分布式的全文搜索引擎。
它能稳定、可靠、快速的完成大数据的实时搜索,ES 被广泛应用于 “云计算” 、 “搜索引擎” 等领域。
基于 RESTful API ,简单易用,是当下最受欢迎的企业级搜索引擎。
例如,Google、某度、360搜索、维基百科、GitHub、某宝等一些电商平台.....等等等等,都基于 ES 完成了一些企业级的最佳实践。
二、ElasticSearch 基本原理
在讲述 ES 基本原理之前,先给大家设定一个场景 case:
我们打开某个搜索引擎,比如某度,
在搜索框里输入 “PHP是世界上最好的语言” ,
某度是如何在这么多文档里,迅速找到与 PHP是世界上最好的语言 相关的所有网站的呢?
搜索内部步骤分为:
第一步:简化
对用户输入的语句,进行简化分析。
举例,“ PHP 是世界上最好的编程语言 ”。
可能会被转化成
—— PHP AND 世界第一 AND 编程语言
不同的搜索引擎翻译的可能不一样,但基本都有 AND、OR、NOT 的语法转换。(也就是我们熟悉的与、或、非嘛)
这个阶段会提取语句的“关键词”,将一些语气词、助词、副词等等去除。
将关键词与语法(AND、OR、NOT)组合,得到引擎可识别的语句。
第二步:生成语法树
对查询语句进行词法分析、语法分析后,生成语法树。
还是这个例子,
PHP 是世界上最好的语言
|
PHP AND 世界第一 AND 编程语言
|
生成语法树:
第三步:倒排检索
基于 ES 的倒排索引,找到所有符合语法树的文档。
这里简单解释下,倒排索引。
我们正常shu
第四步:打分排序
对所有文档进行打分,最终对分值进行排序。
当然,这是搜索的最基本的步骤。
实际上,各大厂内部肯定还会有各种各样的定制与优化,不过整体流程应该都是类似的。
更详细的内部原理与算法,我会在后续的原理篇给大家慢慢介绍。
三、ElasticSearch 应用
本节将从 ES 简单实践说起,
讲解 —— 如何使用 ES 做一个简单的搜索引擎服务
网友评论