Lucene-构建和安装基础示例程序

Lucene-构建和安装基础示例程序

  • 关于本文
  • 关于示例程序
  • 设置CLASSPATH环境变量
  • 使用索引搜索
  • 关于代码
  • 核心代码
  • 索引文件
  • 搜索索引

关于本文

本文的目标是通过示例程序帮助你快速入门,了解基本的安装流程,和配置方法。

关于示例

示例程序演示了Lucene各种功能,以及如何嵌入到你的应用中。

设置CLASSPATH环境变量

首先,你需要下载最新的Lucene发布包,然后解压到一个目录中。

然后你会得到四个JAR包: lucene-core-{version}.jar、 lucene-queryparser-{version}.jar、 lucene-analyzers-common-{version}.jar、 lucene-demo-{version}.jar,把四个JAR包放入到CLASSPATH中。

使用索引搜索

假设你已经正确配置了CLASSPATH环境变量,接着为文件建立索引。

java org.apache.lucene.demo.IndexFiles -docs {path-to-lucene}

上面的命令生成一个叫index的子目录,里面包含了生成了所有Lucene源代码的索引。

建立完索引之后,通过下面的命令来使用索引搜索:

java org.apache.lucene.demo.SearchFiles

尝试搜索supercalifragilisticexpialidocious,你将会得到无结果,因为Lucene源代码中没有这个词。换一个词,如string,再试一次。然后得到了很多结果,每页十条返回,当然你也可以根据需要要求返回更多的结果。

关于代码

本文深入到命令行的背后–源代码,告诉你核心代码有哪些,在哪里,以及功能是什么,目的是为了使你知道如何在自己应用程序中集成Lucene。

核心代码

  • IndexFiles.java:用于创建一个索引文件
  • SearchFiles.java:用于搜索索引文件

索引文件

上面说到IndexFiles类用于创建索引文件,下面来看看它是如何做的。

IndexFiles的执行流程:

main()方法解析命令行参数,然后初始化IndexWriter,打开一个Directory,再初始化StandardAnalyzer和IndexWriterConfig。

IndexFiles的命令行参数:

  • -index:指定了一个存储索引文件的目录路径,如果没有指定-index参数的值,则默认使用相对路径index,如果当前目录不存在,则新建一个。在某些平台上,默认index目录可能是在一个不同的目录中创建的,如用户目录。
  • -docs:指定要建立索引为的文档路径。
  • -update:指示IndexFiles不要删除那些已经存在的索引文件,如果没有这个参数,那么IndexFiles在建立索引之前首先清空索引文件。

IndexWriter使用Directory存储索引信息,Directory是一个抽象概念,并不一定是指文件系统上的一个目录,也可以是RAM或数据库等。在示例程序中用到的是FSDirectory,它存储的目的地是文件系统。

Analyzer是一个处理通道,通过把输入文本打散成一个个的单词,然后再在单词上做进一步的处理,如小写转换、同义词插入、过滤等操作。在示例程序中,使用的是StandardAnalyzer,它使用Unicode文本分隔算法(该算法定义在 Unicode Standard Annex #29中),然后转换成小写,并过滤停止词。Lucene只提供少数几种语言的分析器,定义在lucene/analysis/common/src/java/org/apache/lucene/analysis下。

IndexWriterConfig封装了IndexWriter的所有配置。

当IndexWriter初始化之后,接着调用indexDocs()方法来递归建立Document对象,然后再由IndexWriter序列化到文件中。Document对象是一个简单的数据对象,表示一个索引文件。如果使用了-update命令行参数,IndexWriterConifg的OpenMode将会被设置为OpenMode.CREATE_OR_APPEND,从而IndexWriter尝试根据标识符查找是否存在旧的索引文件,如果存在,则更新;如果不存在,则新建。

搜索索引

SearchFile类由三个组件组成:IndexSearcher、StandardAnalyzer和QueryParser。搜索用到的分词器与建立索引时适用的分词器必须是同一个,才能保证结果正确。QueryParser分析搜索词,产生一个查询对象Query,然后再传递给IndexSearcher进行搜索。

调用SearchFile的search(query,n)方法进行搜索,命中文档将按照分数从高到低排序,然后返回最高的前几文档。

知识链

Lucene-大纲

参考

Lucene 7.4.0 demo API

猜你喜欢

转载自blog.csdn.net/qq_34017326/article/details/94738269