时隔四个月我又回来继续填之前说好要写的关于lucene的坑了,按照之前的安排在第三节中应该是介绍如何通过lucene实现搜索词提示的,但是目前我所实现的搜索词提示过于简单,连基本的根据拼音进行中文提示都无法实现,因此这里我改一下顺序先介绍一下如何通过lucene实现文章的相似性检索。
文章的相似性检索就是对比两篇文章的相似程度,这个功能的应用非常广泛,例如在亚马逊上通过对比得知A和B两本书的十分相似,那么自然而然的可以想到给购买的A的读者推荐B时读者购买的概率会很大。目前运用比较多的实现相似性检索的方法是通过TF-IDF算法计算文章的关键字向量,然后通过余弦相似度方法计算文章间的相似值(这只是一种目前比较常用也比较简单的方法,具体lucene7.5中是否就是用了这种方法来实现的我也不知道,这里提一下只是因为我想卖弄一下而已)。
通过lucene7.5进行相似性检索首先要对需要进行相似性计算的数据建立向量索引,具体代码如下。
public static void createIndex(String value) throws IOException {
String indexDirectoryPath = "D:/similar/";
// 读取需要索引的文件到Lucene的目录类中,新版的Lucene只支持IO2中的Path类型的变量了。
Directory indexDirectory = FSDirectory.open(Paths.get(indexDirectoryPath));
// 创建分词器,这里使用的是SmartChineseAnalyzer分词器,可以根据具体需要使用其他分词器。
Analyzer analyzer = new SmartChineseAnalyzer();
// 新版的Lucene中索引创建类只接收IndexWriter