作者
:鸭血粉丝
来源
:Java极客技术
搜索引擎想必大家一定不会默认
,我们项目中经常使用的 ElasticSearch 就是一种搜索引擎
,在我们的日志系统中必不可少
,ELK 作为一个整体
,基本上是运维标配了
,另外目前的搜索引擎底层都是基于 Lucene 来实现的。
最近遇到一个需求
,因为数据量没有达到需要使用 ElasticSearch 的级别
,也不想单独部署一套集群
,所以准备自己
基于 Lucene 实现一个简易的搜索服务。下面我们一起来看一下吧。
**Lucene **是一套用于全文检索和搜索的开放源码程序库
,由 Apache 软件基金会支持和提供。Lucene 提供了一个简单却强大的应用程序接口
,能够做全文索引和搜索。Lucene 是现在最受欢迎的免费 Java 信息检索程序库。
上面的解释是来自维基百科
,我们只需要知道 Lucene 可以进行全文索引和搜索就行了
,这里的索引是动词
,意思是我们可以将文档或者文章或者文件等数据进行索引记录下来
,索引过后
,我们查询起来就会很快。
索引这个词有的时候是动词
,表示我们要索引数据
,有的时候是名词
,我们需要根据上下文场景来判断。新华字典前面的字母表或者书籍前面的目录本质上都是索引。
首先我们创建一个 SpringBoot 项目
,然后在 pom 文件中加入如下内容
,我这里使用的 lucene 版本是 7.2.1
,
在使用 Lucene 之前我们需要先索引一些文件
,然后再通过关键词查询出来
,下面我们来模拟整个过程。为了方便我们这里模拟一些数据
,正常的数据应该是从数据库或者文件中加载的
,我们的思路是这样的
:
- 生成多条实体数据;
- 将实体数据映射成 Lucene 的文档形式;
- 索引文档;
- 根据关键词查询文档;
第一步我们先创建一个实体如下
:
我们再写一个工具类
,用来索引数据
,代码如下
:
有了工具类
,我们再写一个 demo 来进行数据的索引
上面的 co
ntent 内容可以自行进行替换
,这边避免凑字数的嫌疑就不贴了。
运行结束过后
,我们用过 Lucene 的可视化工具 luke 来查看下索引的数据内容
,下载过后解压我们可以看到有.bat 和 .sh 两个脚本
,根据自己的系统进行运行就好了。我这边是 mac 用的是 sh 脚本运行
,运行后打开设置的索引目录即可。
进入过后
,我们可以看到下图显示的内容
,选择 co
ntent 点击 show top items 可以看到右侧的索引数据
,这里根据分词器的不同
,索引的结果是不一样的
,我这里采用的分词器就是标准的分词器
,小伙伴们可以根据自己的要求选择适合自己的分词器即可。
数据已经索引成功了
,接下来我们就需要根据条件进行数据的搜索了
,我们创建一个 LuceneSearchUtil.java 来操作数据。
在 demo.java 中增加搜索代码如下
:
运行结果如下
,表示搜索到了两条。
通过可视化工具我们可以看到 title 为
"Java 极客技术
"确实是有两条记录
,而且我们也确认只插入了两条数据。
注意这里如果根据其他字符去查询可能查询不出来
,因为这里的分词器采用的是默认的分词器
,小伙伴可以根据自身的情况采用相应的分词器。
至此我们可以索引和搜索数据了
,不过这还是简单的入门操作
,对于不同类型的字段
,我们需要使用不同的查询方式
,而且根据系统的特性我们需要使用特定的分词器
,默认的标准分词器不一定符合我们的使用场景。
而且我们索引数据的时候也需要根据字段类型进行不同 Field 的设定。上
面的案例只是 demo 并不能在生产上使用,搜索引擎在互联网行业是领头羊,很多先进的互联网技术都是从搜索引擎开始发展的。
裸辞,一个字:爽!
以上就是本篇文章
【vue代码可以反编译吗_几百行代码完成百度搜索引擎,真的可以吗?】的全部内容了,欢迎阅览 ! 文章地址:http://dfvalve.xrbh.cn/quote/1797.html
行业
资讯
企业新闻
行情
企业黄页
同类资讯
网站地图
返回首页 迅博思语资讯移动站 http://keant.xrbh.cn/ , 查看更多