Apache Lucene - Building and Installing the Basic Demo

关于本文档

这篇文档可以当做使用和运行 Lucene 代码的入门指南。它让你粗略的了解一些基础的安装和配置。

关于 Demo

Lucene command-line 代码由,一个展示 Lucene 各项功能的 application,和 如何将 Lucene 加入到你的应用中,这两部分组成。

Setting youy CLASSPATH

首先,你需要下载最近 Lucene 的发行版,然后将其解压到一个工作目录中。
你需要四个 JARs:Lucene JAR,queryparser JAR, common analysis JAR,和 Lucene demo JAR。当你解压文档后,你应该看到 Lucene JAR 在 core 的文件夹里——它的命名可能比较类似 lucene-core-{version}.jar。你同样也能看见叫做 lucene-queryparser-{version}.jar,lucene-analyzers-{version}.jar 和 lucene-demo-{version}.jar 各自在 queryparser,analysis/commom/ 和 demo/ 文件夹下。

Indexing Files

一旦你走到这一步,你可能就会迫不及待地想继续走下去。让我们来构建一个索引!假如你的 ClASSPATH 设置的正确,那就输入:

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

这将会生成一个叫“index” 的子文件夹,包含所有 Lucene 源码的一个索引。
查询索引输入:

java org.apache.lucene.demo.SearchFiles

你会被提示输入一个 query。随便输入一句话或编一个单词(例如:“supercalifragilisticexpialidocious”)。你会看到没有匹配 lucene 源码的结果。现在驶入输入单词“string”。将会返回一连串的文档。结果会以每页10条的方式返回,并且询问你是否想要更多结果。

About the code

在这一章,我们走马观花的通过 command-line Lucene demo 学习了源码:到哪里去找它们,它们的部件和功能。本节旨在让Java开发人员了解如何在他们的应用程序中使用Lucene。

Location of the source

这里讨论的文件直接链接到本文档中:

  • IndexFiles.java:代码创建 Lucene 索引。
  • SearchFiles.java:代码查询 Lucene 索引。

IndexFiles

正如我们前面所讨论的,IndexFiles 类创建了一个 Luncene Index。让我们看看它是如何做到的。
它的 main() 函数解析了 command-line 参数,然后准备实例化 IndexWriter,开启一个 Directory,并且实例化 StandarAnalyzer 和 IndexWriterConfig。

command-line 参数 -index 的值代表所有需要被存储索引信息的文件系统文件夹的名字。如果 IndexFiles 通过相对路径,或者,如果 command-line 参数 -index 没有被提供,使用默认的相对索引路径 “index”,索引路径将被创建为当前工作目录的子目录(如果它不存在的情况下)。在一些平台,索引路径将会被创建在不同的文件夹(例如 user’s home 文件夹)。
command-line 参数 -docs 的值是索引文件的位置。

-update 参数值告诉 IndexFiles 不要删除已存在的索引。如果 -update 没有提供,IndexFiles 会在索引任何文档之前先把之前的擦除干净。

Lucene 的 Directory 是 IndexWriter 用来存储索引信息的。我们除了 FSDirectory 这个实现外,还有几个其他的 Directory 子类,可以写入到 RAM,数据库等等。

Lucene 的 Analyzers 处理将文本分解为索引标记(又称 terms)的管道,并可选地对这些标记执行其他操作,例如,转换成小写,synonym insertion,过滤出不想要的标记等等。我们用到的 Analyzer 是 StandardAnalyzer,使用 Unicode Standard Annex #29 中定义的 Unicode Text Segmentation 算法的 Word Breake 规则去创建标记;把标记转换成小写;然后过滤掉“停用词”。“停用词”是一些文章中共有的词汇(a,an,the等)和一些其他没有什么搜索意义的标记。可能每种语言有不同的规则,你应该为每种语言使用适合的 analyzer。Lucene 当前为一些不同的语言提供 Analyzers(具体查看 lucene/analysis/common/src/java/org/apache/lucene/analysis 下的 javadocs)。

IndexWriterConfig 示例掌控了 IndexWriter 的所有配置项。例如,我们在这里基于 command-line 的 参数 -update 的值,设置 OpenMode。

再往下看,在 IndexWriter 被实例化之后,你可能会看到 indexDocs() 代码。这个循环函数爬取目录并且创建 Document 对象。Document 只是一个数据对象,用来表示文件的文本内容以及它的创建时间和位置。这些实例被添加到 IndexWriter 中。如果 command-line 的 -update 参数被提供,IndexWriterConfig OpenMode 将会被设置成 OpenMode.CREATE_OR_APPEND,并且,不再是往 index 里增加 document,IndexWriter 将会通过找到 index 中相同标识符(在我们的案例中,文件路径作为标识符)的 already-indexed 的 document 做更新;如果存在就删除它;然后将新的 document 添加到 index 中。

Searching Files

SearchFiles 类相当简单。它主要和 IndexSearcher,StandarAnalyzer,和一个 QueryParser(同时也用在 IndexFiles 中)。使用解析器构造查询解析器,该解析器用于以解释文档的相同方式解释查询文本:找到单词边界,大小写转换,和移除像“a”、“an” 和 “the” 这样的不使用的词汇。Query 对象包含传递给搜索器的 QueryParser 的结果。注意,也可以在不使用查询解析器的情况下通过编程构造富 Query 对象。查询解析器只是将 Lucene 查询语法解码为相应的 Query 对象。

SearchFiles 使用 IndexSearcher.search(query, n) 方法,返回最多 n 条命中的 TopDocs。结果被打印在 pages 中,以 score 排序(也就是 相关度)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值