原文地址: [链接] Apache Lucene - 构建和安装基础实例 该部分提供一个简单的示例代码来展示 Lucene 特性 About this Document 该文档的目的是作为一个入门指南来使用以及运行 Lucene 代码. 它带你了解一些基本的安装配置. About the Demo 该 Lucene 命 ..

(译)Lucene 7.1.0 demo API

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

原文地址: 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。结果打印在页面上,按分数排序 (即相关性)

  • B3log

    B3log 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 B3log 构思。目前 B3log 已经开源了多款产品:PipeSoloSymWide 等,欢迎大家加入,贡献开源。

    1887 引用 • 3627 回帖 • 589 关注
  • 搜索引擎
    21 引用 • 89 回帖 • 1 关注
  • Lucene
    10 引用 • 21 回帖
回帖   
请输入回帖内容...