lucene创建索引_Lucene概述第一部分:创建索引

lucene创建索引

介绍

我最近一直在与开源搜索引擎Lucene合作 。 我不是专家,但是由于我只是浏览了一些相当稀疏的文档并将应用程序从Lucene的很旧的版本迁移到了最新版本的2.4,所以我在总体上很清楚。 Lucene的文档有点让人想像不到,因此我想趁此机会在我脑海中崭露头角时,对Lucene进行高层次的概述。

如果您发现此页面正在寻找Lucene的入门资料,那么对您有好处! 这就是它的目的。 不要期望找到最佳实践,代码示例或高级主题。 您将对Lucene的概念体系结构有一个清晰的介绍,通过它您可以高效地访问项目网站上的FAQ和教程。 我正在使用Lucene的Java实现,但是所有这些高级内容都将同样适用于任何其他Lucene风格。

您应该了解的第一件事是Lucene的实际作用。 Lucene实际上只做两件事。

  1. 它创建搜索索引。
  2. 它在那些索引中搜索内容。

索引是您需要进行搜索的任何数据的有效导航表示。 您的数据可能与内容管理系统中的一组Word文档一样简单,也可能是来自数据库,HTML页面或系统中任何类型的数据对象的记录。 由您决定要使哪些实体可搜索。 对于我们的讨论,我们假设我们正在处理一组Word文档。

创建索引

因此,第一步是为我们的Word文档集创建索引。 为此,我们需要编写一些代码,以从Word文档中获取信息并将其转换为可搜索的索引。 唯一的方法就是蛮力。 我们将必须遍历每个Word文档,检查每个文档并将其转换为Lucene创建索引时需要处理的部分。

Lucene创建索引需要哪些部分? 那里有两个。

  1. 文件资料
  2. 领域

这两个抽象是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中,这归结为以下事实:创建字段时,我们必须指定

  1. 是否存储
  2. 是否索引
  • 如果建立索引,是否进行分析

现在,您应该清楚字段的详细信息。 重要的是,我们可以存储和索引给定的字段。 这不是一个选择。

创建索引

将所有文档添加到索引后,我们只需告诉索引编写者即可创建索引。 从现在开始,我们可以根据索引的字段搜索任何文档。 寻找即将到来的条目,以对在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

lucene创建索引

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/356230.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙os2.0发布回放,华为HarmonyOS 2.0系统发布会内容大全 鸿蒙os6月2日直播回放地址入口...

华为鸿蒙os6月2日直播回放在哪里看?华为HarmonyOS 2系统发布会说了些啥?HarmonyOS 2系统在6月2日正式发布了,之前预约过的小伙伴现在就可以更新体验了,这次发布将会对安卓系统一个重大的革新,将会彻底颠覆之前的安卓系…

02-SSH综合案例:需求分析(后台)

1.1.7 用户模块:(后台) 不用添加了,添加的话在前台就注册了。 查询所有用户: 修改用户信息: 删除用户信息: 1.1.8 一级分类:(后台) 主要都还是增删改查的操作 查询所有一级分类: *分页 添加一级分类: 修改…

python中当地时间_R 与 Python 中与时间相关内容的梳理

约万字长文预警,如果你没时间,就不用看了,这就是一个梳理的文章,方便我后来找资料。因为工作的关系,近期需要梳理一些 Python 的知识(可能有小伙伴知道了,LI-6800 搞了个大动作,支持 Python 编程…

JavaOne 2015:为JDK 9做准备– blog @ CodeFX

JavaOne 2015看到了Project Jigsaw团队关于Java 9中的模块化的一系列讨论 。它们都是非常有趣的,并且充满了宝贵的信息,我敦促每个Java开发人员都注意它们。 除此之外,我想给社区一种搜索和引用它们的方法,因此我在这里总结一下&…

华为oj----iNOC产品部-杨辉三角的变形 .

此题提供三种方法,第一种,一开始就能想到的,设置一个足够大的数组存储生成的杨辉三角,然后进行判断就行,此方法参见:华为oj iNOC产品部-杨辉三角的变形 另一种方法是采用递归: 三角形的每行的个数为2*n-1,n…

java 短路判断_java中和的区别(|和|同理)

在java的基础面试题中肯定有这个问题:&和&&的区别?这个问题很好回答,核心思想就是一个不短路一个短路的问题。首先说下&,1、它可以表示二进制中的位运算分析:二元操作符,操作两个二进制数据…

不属于计算机完成科学特点的是,2020年9月网络教育统考计算机应用基础模拟题试卷4...

2020年9月网络教育统考计算机应用基础模拟题试卷4一、单选题1.______是第四代计算机的典型代表。A.微型机B.超小型机C.巨型机D.大中型机答案:A2.个人计算机又称PC机,这种计算机属于______。A.微型计算机B.小型计算机C.超级计算机D.巨型计算机答案&#x…

苹果13系统锁屏延迟_iPhone 11 锁屏出现延迟是怎么回事?

正常情况下,按下 iPhone 电源键,屏幕会立即息灭,有不少用户反馈按下锁屏键后,会有片刻的延迟才能关屏,虽然延迟并不是很长,但会给人造成“卡顿”的假象。很多人把原因归结为 iOS 13 系统,其实并…

从Spring起,Java EE 6必须具备哪些附加功能?

我是一名高级Java开发人员,必须研究应用程序架构师选择的技术。 我最多只能表达对特定技术的看法,不能做出/影响技术选择的决定。 因此,在我的正式项目中,我别无选择从Spring迁移到JavaEE6或从JavaEE6迁移到Spring。 我坚信&#…

html中img引入git动画,用Github五万颗星的css动画库, 为网页增添趣味性

css动画可以做到什么程度?Github上有一个非常优秀的动画项目, 足足有5万颗星!在线效果展示:animate整个项目只有一个css文件, 使用方法也非常简单, 只要给相应的元素添加class属性即可通过悬浮产生动画的小DemoAnimate的动画展示body, html{margin: 0;padding: 0;}#title{marg…

JQuery------鼠标双击时,不选中div里面的文字

如图&#xff1a;(去掉选中文字的蓝色背景色) 代码: //方法一:<div class"test" onselectstart"return false" >文字</div> //方法二: .test{-moz-user-select:none;-webkit-user-select: none; -ms-user-select: none; } 转载于:h…

限制ul显示高度_HP Envy 34寸超宽曲屏 显示器评测

先上结论&#xff1a;这是我目前不换显卡的前提下&#xff0c;能买到最好的显示器。估计在今后很长时间&#xff0c;它也算是一个相当好的显示器。如果你对显示器要求比较高&#xff0c;那么买这个显示器应该没错。显示器的指标如下&#xff1a;对角线34寸。基本就和27的16&…

何时使用JavaFX代替HTML

像我这样的JavaFX爱好者反复面对的一个问题是何时&#xff08;或为什么&#xff09;使用JavaFX而不是HTML的问题&#xff08;5&#xff09;。 这是我的两分钱&#xff1a; 如果…&#xff0c;则应使用JavaFX。 …您对耐用性/质量感兴趣。 JavaFX是Java&#xff01; 您将能够使…

计算机网络中sep是什么意思,SEP系统介绍及实施方案介绍.ppt

SEP系统介绍及实施方案介绍Windows server 2003 的配置 Windows server 2003 的配置 Windows server 2003 的配置 策略管理服务器的规划和安装 策略管理服务器的规划和安装。 安装SEP的前提条件 数据库选型,以及安装 规划好安装所需的IP地址&#xff0c;密码&#xff0c;共享机…

jeecg中ajax传值的前端js和后台代码

前端js: var b1; $.ajax({ type : "POST",            --Post请求方式 url : orderController.do?wuliao,    --路径 crossDomain : true,          data: idb,            --传入的id值 success : function(data) { datadata…

linux wenj 立即生效_【新书连载】测试工程师核心开发技术(3)—远程登录Linux系统...

1.3.3 在线帮助命令下面对常用的在线帮助命令进行介绍。1&#xff0e;man命令man命令的作用是查看联机手册&#xff0c;命令格式如下。man [选项] 命令名称man后面的参数的含义如表1-1所示。表1-1 man后面的参数的含义输入man数字命令/函数即可以查到相关的命令和函数。若man…

华软计算机网络技术,[计算机硬件及网络]计算机网络技术专业自评报告华软.doc...

[计算机硬件及网络]计算机网络技术专业自评报告华软广州市高职高专教育示范性专业验收计算机网络技术专业自查自评报告广州大学华软软件学院二OO八年十月目 录广州大学华软软件学院学院概况5广州大学华软软件学院办学指导思想5计算机网络技术专业概况51、专业专业定位和人才培养…

利用Python进行简单的图像识别(验证码)

这是一个最简单的图像识别&#xff0c;将图片加载后直接利用Python的一个识别引擎进行识别将图片中的数字通过 pytesseract.image_to_string(image)识别后将结果存入到本地的txt文件中1 #-*-encoding:utf-8-*-2 import pytesseract3 from PIL import Image4 5 class GetImageDa…

二阶偏微分方程组 龙格库塔法_牛顿法和拟牛顿法——(书中附录B)

牛顿法(Newton method)和拟牛顿法(quasi-Newton method)也是求解无约束最优化问题的常用方法&#xff0c;具有收敛速度快的优点。牛顿法是迭代算法&#xff0c;每一步需要求解目标函数的海赛矩阵的逆矩阵&#xff0c;计算比较复杂。拟牛顿法通过正定矩阵近似海赛矩阵的逆矩阵或…

HTML CSS 特殊字符表

转自CSDN博客&#xff1a;http://blog.csdn.net/bluestarf/article/details/40652011 HTML有许多特殊的字符&#xff0c;您对此有多少了解&#xff1f;平时在WEB制作中&#xff0c;您又有用到多少&#xff1f;或者说你在平时使用之时&#xff0c;是否也会碰到&#xff0c;有许多…