(译)Lucene 7.1.0 demo API

本贴最后更新于 2528 天前,其中的信息可能已经天翻地覆

原文地址: http://lucene.apache.org/core/7_1_0/demo/overview-summary.html#About_this_Document

Apache Lucene - 构建和安装基础实例

该部分提供一个简单的示例代码来展示 Lucene 特性

About this Document

该文档的目的是作为一个入门指南来使用以及运行 Lucene 代码.它带你了解一些基本的安装配置.

About the Demo

该 Lucene 命令行代码由能够添加进你的应用程序中关于 Lucene 的各种功能组成.

Setting your CLASSPATH

首先,你应该下载最新版本的 Lucene 目录然后解压到一个工作目录中.

你需要需要用到的 Jars 包:Lucene jar,queryparser jar,common analysis jar 以及 Lucene demo jar.你应能够在核心目录下看到你刚解压后创建的目录下的 lucene jar 文件.你应该以带版本号的命名方法来命名这些 jar 包,比如 lucene-core-{version}.jar.以此类推的还有 lucene-queryparser-{version}.jar,lucene-analyzers-common-{version}.jar,以及 lucene-demo-{version}.jar.

请添加上述 jar 包到你的 CLASSPATH 下.(如果使用 maven 或 gradle,请直接添加相应版本的依赖即可)

Indexing Files

一旦你想尽可能快的了解这个地方.让我们先创建索引假设你已经设置好了你的 CLASSPATH 环境,请输入:

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

它将会生成一个名称为"index"子目录,包含一个完整索引的所有 lucene 源代码

为了查询该索引,请输入

java org.apache.lucene.demo.SearchFiles

你可能会被提示输入一个查询.请随便输入一个句子(比如:supercalifragilisticexpialidocious).你将会看到这里不会匹配到任何结果.现在,请你尝试输入"string".然后就会返回一长串文档.该结果将会以每 10 行来进行分页,然后询问你是否需要等多结果.

About the code

在该部分,我们将通过 Lucene 命令行例子来了解该部分源码: 哪里来发现它们以及部分功能.该部分的目的是希望 Java 开发者理解如何在它们的程序中使用 Lucene.

Location of the source

下面的链接直接连接到源代码文件

IndexFiles

正如我们之前了解的,IndexFiles 类将会创建一个 Lucene 索引. 让我们看看它是如何做到的.

main()方法解析命令行参数,然后准备初始化IndexWriter, 打开 Directory,然后初始化StandardAnalyzerIndexWriterConfig.

命令行参数中的-index 参数用来表示该索引下的文件系统下的所有信息都应该被存储.如果 IndexFiles 通过-index 命令行参数来调用了一个相对路径或者没有输入该-index 参数,将会导致在默认的相对路径下会创建一个"index"目录,用来存储索引创建相关的文件和子目录(如果要创建的文件不存在).在某些平台下,索引路径可能在不同的目录下被创建(比如用户目录)

命令行中的-docs 参数值表示该目录位置下所包含的文件都会被索引

命令行中的-update 参数告诉 IndexFiles 如果索引已经存在的话,不要删除这些索引.如果-update 参数没有提供,IndexFiles 则会先在索引文件之前清除这些存在索引.

Lucene 中的Directory被 IndexWriter 用来在索引中存储信息.此外,我们一般使用它的实现类FSDirectory来将数据写入 RAM(内存)中.

Lucene 中的Analyzer是用来处理将文本切割成索引 token 的管道,也称之为 terms,并且在这些 tokens 上可选地执行其他操作,比如小写转换,同义词转换,过滤无效的 tokens 等等.这里我们使用的分析器是标准分析器(StandardAnalyzer),它使用在 Unicode 标准附件#29 中指定的 Unicode 文本分割算法中使用单词 Break 规则创建 tokens(http://unicode.org/reports/tr29/)。将 tokens 转换成小写;过滤停顿词;停顿词是一些常用的词汇,比如在一篇文章中的 a,an,the 等等.以及一些其他 tokens 会使用更少的词根来进行搜索.值得注意的是,不同的语言有不同的规则,你应该为不同的场景选择合适的分析器.Lucene 目前为大量不同的语言提供不同的分析器.(请参考:lucene/analysis/common/src/java/org/apache/lucene/analysis 目录下的 javadoc.

IndexWriterConfig 实例是用来持有 IndexWriter 的所有相关配置.例如,我们可以通过命令行参数中的-update 来设置打开模式(OpenMode)

接着往下看该文件,在实例化了 IndexWriter 之后,您应该看到 indexDocs()相关代码。这个递归函数抓取目录并创建Document 对象.

文档只是一个数据对象,用来表示来自文件的文本内容,以及它的创建时间和位置,这些文档实例会被添加到 IndexWriter.如果我们通过命令行给定了-update 参数,IndexWriterConfigOpenMode 会被设置成OpenMode.CREATE_OR_APPEND,然后将这些文档添加进索引中,如果 IndexWriter 发现已经存在的文档,会试图根据相同的标志符来更新他们.(在我们的例子中,文件路径作为该标识符),更新的步骤是先将它们从索引中删除,然后添加新的文档到索引中.

Searching Files

SearchFiles 类很简单. 他主要和IndexSearcherStandardAnalyzer (同样在 IndexFiles 类中使用)以及 QueryParser搭配使用. 查询解析器是一个用于解释查询文本的分析器构造的,就像解释文档一样:发现文档边界,大小写转换,移除无用的单词像'a','an'和'the'. 查询对象包含向搜索器传递的 QueryParser 的结果.注意,如果不使用查询解析器,也可以以编程方式构造一个丰富的查询对象。查询解析器只允许将 Lucene 查询语法解码到相应的查询对象中。

SearchFiles 使用IndexSearcher.search(query,n)来方法返回命中的前几个 max n 的TopDocs。结果打印在页面上,按分数排序(即相关性)

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...