前言
今天白天自己实现了文本的余弦相似度的实现方法,但是下午集成到后端项目中,进行测试后发现,在系统运行过程中,发现计算延迟太高了,会严重影响用户的体验,并且服务器受不了。每个用户点到每一篇博客文章的详细文章中,都会遍历所有的文章列表,计算相似度,真的太慢了。所以考虑使用lucene进行自动分词,然后计算倒排索引,然后计算文本的相似度。
Lucene可以实现全文的检索,找到每篇博客文章相似的博客文章,全文检索首先将要查询的目标文档中的词提取出来,组成索引,通过查询索引达到搜索目标文档的目的。
学习Lucene
Lucene是一套用于全文检索和搜索的开放源代码程序库,由Apache软件基金会支持和提供。Lucene提供了一个简单却强大的应用程序接口,能够做全文索引和搜索,在Java开发环境里Lucene是一个成熟的免费开放源代码工具。
Lucene可以实现全文检索。
我们只需要在抽取时,将博客文章信息清洗完成之后,一边写入数据库,一边调用Lucene将索引写入本地,等待使用。
在Spring Boot项目中,使用Lucene
(1)添加依赖
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>6.6.5</version>
</dependency>
<!-- lucene核心库 -->
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-core</artifactId>
<version>${lunece.version}</version>
</dependency>
<!-- Lucene的查询解析器 -->
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-queryparser</artifactId>
<version>${lunece.version}</version>
</dependency>
<!-- lucene的默认分词器库 -->
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-analyzers-common</artifactId>
<version>${lunece.version}</version>
</dependency>
<!-- lucene的高亮显示 -->
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-highlighter</artifactId>
<version>${lunece.version}</version>
</dependency>
这里我选择了6.6.5版本,了解到在Lucene的4版本之前,是需要自己进行分词,然后在写入Lucene进行索引的,而在Lucene的4版本之后提供了不同的分词器,可以进行分词,比如标准分词器,IK分词器等等。
【1】坑一:
不知道为什么,我不管使用标准分词器进行初始化,还是使用IK分词器进行初始化,都会报错,并且错误不同
在网上找了很久解决方法,都没有能解决我的问题,所以只能另辟蹊径,寻找另外的办法
然后我就去想办法,不用maven导入的IK词器,自己去github找了一个有人实现的IK分词器
https://github.com/wks/ik-analyzer
然后将其打包到本地Maven仓库中,结果发现还是不行
mvn install -Dmaven.test.skip=true 然后打包到本地maven仓库
将以下依赖加入工程的pom.xml中的…部分。
<dependency>
<groupId>org.wltea.ik-analyzer</groupId>
<artifactId>ik-analyzer</artifactId>
<version>3.2.8</version>
</dependency>
然后在github找有关Lucene的开源项目,找到了有人手动继承了Lucene的分词器类,然后自己实现了IK分词器
我准备将它的代码引入到我的项目中,看看能不能让项目中的Lucene真正的运行起来
这个东西明天在搞,今天就到这了。