1.Lucene
全文检索?Lucene?
在我们开发项目的过程中,我们往往会使用模糊搜索这个功能,比如说:
我们数据库中存储有 ”商品名称“ 这个字段,我们需要对其进行模糊搜索。
在项目前期我们直接在数据库中使用 like 语句进行模糊搜索,然后项目运行一段时间,新增了大量的商品,数据量增加到上百万的数据,这时只要搜索需要很长时间才能响应。
出现这个原因是在模糊搜索上,因为普通的数据库模糊搜索根本做不了索引,用户每次搜索都进行全表扫描查询,速度当然慢。
这时候我想起淘宝京东,他们的商品数量应该不止百万,那他们是怎么做到秒搜的呢?
这时候我们就可以在网上查询一下,大家都在说搜索引擎,什么 elasticsearch Solr 这些搜索引擎,支持PB级数据,感觉好牛气。但是他们都有个问题,那就是他们是单独的服务。
如果我们想开发个单机版的应用,这时我们就要安装这些额外的软件,这个就有点麻烦了。
经过进一步的了解,我知道了这些搜索引擎基本上都是基于 Lucene 开发的,而且 Lucene 只是一个工具包,不需要额外的服务,这就是我们需要的。
基本上使用 Lucene 的话,上面我们有的问题都没了,上面单机版的应用这些都没问题。
我们该如何选择?
在上面我的描述中,我们基本确定了该如何选择;
- 在我们大型分布式的应用,我们应该使用 elasticsearch 、Solr 这些产品。
- 在单机小项目中,比如:个人博客、知识库等等数据量不太大的情况下用 Lucene 。
现有的项目要怎么使用?
假如我们现在已经在运行的项目,我们想用 Lucene 或者 elasticsearch 、Solr 这些来做搜索,可以吗?
这当然是可以的,我们只要把数据通过 Lucene 或者 elasticsearch 、Solr 这些来处理一下,以后的搜索全部走他们就可以了,至于添加修改这些还是操作原来的表。
比如说我有个博客网站,我想使用 Lucene 来进行全文搜索,这时我只要把之前的文章使用 Lucene 来创建索引,然后把搜索的接口改成使用 Lucene 来搜索,以后添加的文章我就把数据放到 Lucene 中,这样就可以了。
学习资源
-
Bilibili ElasticSearch7.6.x视频 https://www.bilibili.com/video/BV17a4y1x7zq
-
Bilibili Lucene全文检索技术视频 https://www.bilibili.com/video/BV1jt4y1q79U
-
lucene 官网 https://lucene.apache.org/
-
lucene界面管理工具 luke https://github.com/DmitryKey/luke 【点击下载luke8.0.0】
-
IK中文分词器 IKAnalyzer-lucene https://gitee.com/jianggujin/IKAnalyzer-lucene