大数据技术之Elasticsearch-概述(二)全文检索和Lucene*
1)全文检索,倒排索引
(1)全文检索
全文检索是指计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户 的检索方式。这个过程类似于通过字典中的检索字表查字的过程。全文搜索引擎数据库中的数据。
(2)倒排索引-举例
传统数据库存储:
id | 描述 |
1 | 优秀员工 |
2 | 销售冠军 |
3 | 优秀团队领导 |
4 | 优秀项目 |
对应搜索引擎:
https://wiki.mbalib.com/wiki/%E5%A4%A7%E6%95%B0%E6%8D%AE
链接内所有文字
目的:搜索员工,返回1
--------------------------------------------------------------------------------------------------
倒排索引处理步骤:
1、切词:
优秀员工 —— 优秀 员工
销售冠军 —— 销售 冠军
优秀团队领导 —— 优秀 团队 领导
优秀项目 —— 优秀 项目
注意:切词的算法,最好要保证不同词条切词的效果相同
2、建立倒排索引:
就是建立一张关键词和原始表的映射表
拿关键词找对应的 id
所有切词之后的关键词 | 包含关键词的id |
优秀 | 1,3,4 |
员工 | 1 |
销售 | 2 |
团队 | 3 |
。。。 | 。。。 |
3、搜索
关键词:优秀
1)从倒排索引中查找id
优秀 1,2,3,4
取 1,2,3,4
2)从原始表中通过id取出原始数据
1 优秀论文
2 优秀员工称号
3 优秀项目
4 优秀团队
2)Lucene和ES
Lucene是一个基于Java的全文信息检索工具包,它只做了文本检索的部分,所以他不是完整的搜索引擎。
Lucene可以把文本进行索引,将索引文件保存到磁盘或内存中。
lucene,就是一个jar包,里面包含了封装好的各种建立倒排索引,以及进行搜索的代码,包括各种算法。我们就用java开发的时候,引入lucene jar,然后基于lucene的api进行去进行开发就可以了。
ES是一个高度可伸缩的开源全文搜索引擎。
性能:可以以近实时的方式快速存储,搜索,分析大量数据。
ES也是基于Lucene开发的,他隐藏了复杂性,并且提供了restful api接口(调用URL就能显示数据了),java api接口(写Java代码)。