目录
1、ElasticSearch概念:
ElasticSearch简称es,es是一个开源的高扩展的分布式全文检索引擎,通过创建的索引可以快速检索数据,同时本身扩展性能高,可以扩展到上百台服务器。
2、全文检索:
①数据分类:
(1)结构化数据:有固定格式和固定长度的数据,如数据库数据,元数据;
(2)非结构化数据:无固定格式和不定长的数据,如邮件、word文档等磁盘文件。
②全文检索概念:
(1)将非结构化数据中一部分信息提取出来,重新组合,使其变得结构化,通过对这一部分有结构化数据的搜索,找到对应非结构化数据,从而达到较快搜索目的。这部分从非结构数据中提取然后重组的数据就是索引。
如:字典中,汉字的拼音和部首就是索引,通过汉字拼音和部首可以快速找到汉字位置。
(2)先建立索引,然后对索引进行搜索的过程即全文检索。建立索引非常耗时,但索引一旦创建,便可以多次使用,全文检索主要处理的是查询。
3、全文检索实现过程:
①全文检索流程图:
全文检索分为:创建索引和查询索引两个过程。
(1)创建索引:将现实世界的结构化数据或非结构化数据,进行数据提取然后重新组合,创建索引过程。
(2)索引查询:用户查询请求,搜索创建的索引,并返回结果的过程。
②创建索引:
对文档索引过程中,将用户要将搜索的内容提取出来,进行索引创建,索引存储在索引库中。
③创建文档对象:
获取的原始内容中目的是为了索引,在索引前需要将原始内容创建为文档,文档包括一个个域,域中存储属性。文档中有多个域,每个文档都有一个唯一标识,即id。
例:磁盘上一个文件可以看为一个文档,则该文件的文件名,文件大小,文件内容,文件路径即为文档的域。
④文档分析:
将原始内容创建为包含多个域的文档,还需对文档中域的内容进行分析,从而对域中内容进行分词。
⑤创建索引:
(1)索引目的是搜索,通过搜索索引词汇从而找到对应文档。
(2)倒排索引结构:通过索引找到对应文档。
(3)正排索引:根据文档到关键信息查询文档,只能顺序查找,数据量大查询效率低。
正排索引转化为倒排索引如下图:
⑥查询索引
查询索引即为搜索过程,用户通过输入关键字,从索引中进行搜索过程。通过关键字搜索索引,索引查找到对应文档内容,从而搜索到对应内容。
⑦用户查询接口
全文检索提供用户搜索的界面供用户输入关键字,搜索完成展示结果。如下图:
⑧创建查询对象
用户输入关键字查询之前,需要先构建一个查询对象,查询对象可以指定查询的域,关键字等,查询对象会生成具体语法。
⑨执行查询
搜索过程中,通过关键字在倒排索引词典中查找索引,从而找到索引所链接的文档链表。
⑩渲染结果
以一个友好界面将结果展示给用户,用户根据搜索结果找到自己所需要的信息。
4、ElasticSearch和MySQL区别
①响应时间
(1)ElasticSearch:它是基于倒排索引,TB级数据在毫秒级就可以返回搜索结果。
(2)mysql:关键字模糊查询时,数据库需啊哟遍历整张表,数据量越大,查询效率越低。
(3)当用户输入关键字:手机,如下图数据:
elasticSearch会立即返回文档f,g,不用花费多余时间在其他文档上;
mysql则需要从文档a一直遍历到文档g,极大降低查询效率。
②分词
(1)ElasticSearch:用户使用elasticSearch进行搜索时,elasticSearch会自动分好词;
如:输入”四川火锅“时,elasticSearch会做两件事:一是将”四川火锅“分为”火锅“和”四川“两个词;二是查找包这两个词的文档。
(2)mysql:数据库不支持分词功能,人工开发耗时耗力,组合词检索很难完成。
如:输入”四川火锅”时,数据库只会对“四川火锅”这四个字进行模糊查询,“四川好吃的火锅”这时查询不到的。
③相关性
(1)ElasticSearch:es支持相关性评分,通过合理优化,es可以将结果由评分高到底排列展示给用户,评分越高,表示相关性越高,满足用户需求。
如:搜索“跑步”,带有“跑步”的信息要比带有“跑”的信息靠前
(2)mysql:数据库不支持相关性搜索,数据模糊查询后,放回结果是根据表中存储顺序返回的,于是便会出现查询出大量毫无相关内容。-