外贸社交网站排名,施工员证书查询网站,医院网站建设选哪家,wordpress表结构怎么样介绍 我最近一直在与开源搜索引擎Lucene合作 。 我不是专家#xff0c;但是由于我只是浏览了一些相当稀疏的文档并将应用程序从Lucene的很旧的版本迁移到了最新版本的2.4#xff0c;所以我在总体上很清楚。 Lucene的文档有点让人难以想象#xff0c;因此我想趁此机会在我脑海… 介绍 我最近一直在与开源搜索引擎Lucene合作 。 我不是专家但是由于我只是浏览了一些相当稀疏的文档并将应用程序从Lucene的很旧的版本迁移到了最新版本的2.4所以我在总体上很清楚。 Lucene的文档有点让人难以想象因此我想趁此机会在我脑海中崭露头角时对Lucene进行高层次的概述。 如果您发现此页面正在寻找Lucene的入门资料那么对您有好处 那就是它的目的。 不要期望找到最佳实践代码示例或高级主题。 您将对Lucene的概念体系结构有一个清晰的介绍通过它您可以高效地访问项目网站上的FAQ和教程。 我正在使用Lucene的Java实现但是所有这些高级内容都将同样适用于任何其他Lucene风格。 您应该了解的第一件事是Lucene的实际作用。 Lucene实际上只做两件事。 它创建搜索索引。 它在那些索引中搜索内容。 索引是您需要进行搜索的任何数据的有效导航表示。 您的数据可能与内容管理系统中的一组Word文档一样简单或者可能是来自数据库HTML页面或系统中任何类型的数据对象的记录。 由您决定要使哪些实体可搜索。 对于我们的讨论我们假设我们正在处理一组Word文档。 创建索引 因此第一步是为我们的Word文档集创建索引。 为此我们需要编写一些代码以从Word文档中获取信息并将其转换为可搜索的索引。 唯一的方法就是蛮力。 我们必须遍历每个Word文档检查每个文档并将其转换为Lucene创建索引时需要处理的部分。 Lucene创建索引需要哪些步骤 那里有两个。 文件资料 领域 这两个抽象是Lucene的关键Lucene用两个顶级Java类Document和Field来表示它们。 文档不要与我们的实际Word文档混淆是一个Java类表示Lucene中的可搜索项目。 可搜索项是指文档是您在搜索时发现的东西。 创建这些文档由您决定。 对于我们来说幸运的是这是从实际的Word文档到Lucene文档的非常清晰的一步。 我想任何人都会同意这将是我们的用户在进行搜索时希望找到的Word文档。 这使我们的处理变得相当简单我们将为每个实际的Word文档简单地创建一个Lucene文档。 创建文档及其字段 但是我们该怎么做呢 实际上非常简单。 首先我们使用new运算符创建Document对象-仅此而已。 但是在这一点上文档是没有意义的。 现在我们必须确定要添加到文档中的字段。 这是我们必须思考的部分。 文档由任意数量的字段组成每个字段都有一个名称和一个值。 这里的所有都是它的。 创建Lucene索引的开发人员几乎普遍创建了两个字段。 最重要的字段将是“内容”字段。 这个字段保存了我们要为其创建Lucene文档的Word文档的内容。 请记住字段的名称完全是任意的但是大多数人将字段之一称为“内容”他们将现实世界中可搜索对象在我们的情况下为Word文档的实际内容粘贴到该字段的值中。 本质上字段只是一个名称值对。 开发人员创建的另一个非常常见的字段是“标题”字段。 该字段的值将是Word文档的标题。 我们可能希望将有关Word文档的其他信息保留在索引中。 其他常见字段是诸如“作者”“ creation_date”“关键字”等之类的内容。对所需字段的标识完全取决于业务需求。 因此对于我们要使其可搜索的每个Word文档我们都必须创建一个Lucene文档其中包含我们上面概述的字段。 使用这些字段创建文档后我们将其添加到Lucene索引编写器中并要求它编写索引。 而已 现在我们有了一个可搜索的索引。 的确如此但是我们可能已经忽略了几个Field细节。 让我们仔细看看Fields。 字段详细信息存储还是索引 字段可以以多种方式保留在索引中。 您最初可能怀疑存在的最明显的方法也许是唯一的方法是可搜索的方法。 在我们的示例中我们完全希望如果用户键入一个Word文档内容中存在的单词则搜索将在搜索结果中返回该Word文档。 为此Lucene必须索引该字段。 首先该术语有点让人困惑但是请注意完全有可能在不使其可搜索的情况下将“字段”“存储”在索引中。 换句话说可以“存储”一个字段但不能“索引”它。 为什么 您很快就会看到。 Lucene在将Field保留在索引中的方式之间的第一个区别是存储还是索引。 如果我们期望某个字段的值匹配以使文档被搜索击中那么我们必须为该字段建立索引。 如果仅存储字段则搜索查询无法达到其值。 为什么要存储一个字段 很简单当我们通过索引字段之一命中Document时Lucene将向我们返回整个Document对象。 所有存储的字段将在该Document对象上可用 被索引的字段将不在该对象上。 索引字段是用于查找文档的信息存储的字段是与文档一起返回的信息。 两件事。 这意味着尽管我们可能无法基于给定字段的内容进行搜索但是当搜索返回文档时我们仍然可以利用该字段的值。 我能想到的最明显的用例是基于Web的文档的“ url”字段。 搜索aURL的值没有任何意义但是您肯定希望知道搜索返回的文档的URL。 您的结果页面还可以如何将用户引导到点击页面 这是非常重要的一点存储的字段的值将在搜索返回的文档上可用但是实际上只有索引的字段的值可以用作搜索的目标。 从技术上讲存储的字段保留在Lucene索引内。 但是我们必须跟踪索引的字段与存储的字段不同的事实。 不幸的术语。 这就是单词重要的原因。 他们可以避免很多混乱。 索引字段已分析还是未分析 对于下一个皱纹我们必须指出可以以两种不同的方式对索引字段进行索引。 首先我们可以在单个块中索引字段的值。 换句话说我们可能有一个“电话号码”字段。 当我们搜索电话号码时我们需要匹配整个值或什么都不匹配。 这是很合理的。 因此对于像电话号码这样的字段我们将整个值ATOMICALLY索引到Lucene索引中。 但是让我们考虑一下Word文档的“内容”字段。 我们是否希望用户必须匹配整个字段 当然不是。 我们希望将Word文档的内容分解为可搜索的标记。 此过程称为分析。 我们可以从丢弃所有不重要的词开始例如“ a”“ the”“ and”等。我们可以进行许多其他优化但是最重要的是字段的内容如“ contents” ”应该由Lucene分析。 这将产生目标轻量级索引。 这就是搜索变得有效和强大的方式。 在API中这归结为以下事实创建字段时我们必须指定 是否存储 是否索引 如果建立索引是否进行分析 现在您应该清楚字段的详细信息。 重要的是我们可以存储和索引给定的字段。 这不是一个选择。 创建索引 将所有文档添加到索引后我们只需告诉索引编写者即可创建索引。 从现在开始我们可以根据索引的字段搜索任何文档。 寻找即将到来的条目以对在Lucene索引中搜索事物有一个高层次的概述。 分手笔记 回想一下我们说过假设我们的目标数据是一组Word文档会更简单。 现在我们已经完成了请考虑您的目标数据可以是任何数据。 实际上搜索的是Lucene文档。 您可以根据需要创建任何内容。 它们可以并且经常来自现实世界中数据对象的集合。 同样将哪些数据放入Lucene文档中取决于您的业务需求。 它可以像Word文档到Lucene文档的一对一映射一样简单或者每个Lucene文档可以是各种数据库查询以及您可能会发现的其他内容的集合。 索引愉快 参考 Lucene概述第一部分由我们的W4G合作伙伴 Chad Davis在zeroInsertionForce博客上创建索引 。 翻译自: https://www.javacodegeeks.com/2012/04/lucene-overview-part-one-creating-index.html