Lucene –快速添加索引和搜索功能

什么是Lucene?

Apache LuceneTM是完全用Java编写的高性能,功能齐全的文本搜索引擎库。 它是一项适用于几乎所有需要全文搜索的应用程序的技术,尤其是跨平台的应用程序。

Lucene可以纯文本,整数,索引PDF,Office文档。 等等。,

Lucene如何启用更快的搜索?

Lucence创建了一个称为倒排索引的东西。 通常我们在文档中映射文档->术语。 但是,Lucene则相反。 创建索引词->包含该词的文档列表,这使搜索速度更快。

安装Lucene

Maven依赖

<pre class='brush:xml'><dependency><groupid>org.apache.lucene</groupid><artifactid>lucene-core</artifactid><version>3.0.2</version><type>jar</type><scope>compile</scope>
</dependency>

下载依赖

从http://lucene.apache.org/下载Lucene,并在类路径中添加lucene-core.jar。

Lucene如何工作?


首先让我们从底部开始了解图片-中心。 原始文本用于创建Lucene“文档”,使用指定的分析器对其进行分析,然后根据字段的Store,TermVector和Analzed属性将文档添加到索引中。

接下来,从上到下搜索。 用户以文本格式指定查询。 查询对象是基于查询文本构建的,执行查询的结果作为TopDocs返回。

Lucene核心课程

目录,FSDirectory,RAMDirectory 包含索引的目录

基于文件系统的索引目录

基于内存的索引目录

目录

indexDirectory = FSDirectory.open(新文件('c:// lucene // nodes'));

索引作家 处理写入索引– addDocument,updateDocument,deleteDocuments,merge等 IndexWriter writer =新的IndexWriter(indexDirectory,

新的StandardAnalyzer(Version.LUCENE_30),

新的MaxFieldLength(1010101));

IndexSearcher 使用indexReader进行搜索-搜索(查询,整型) IndexSearcher searcher =新的IndexSearcher(indexDirectory);
文献 DTO用于索引和搜索 Document document = new Document();
领域 每个文档包含多个字段。 有2部分,名称,值。 新字段('id','1',Store.YES,Index.NOT_ANALYZED)
术语 测试一个字。 用于search.2零件。要搜索的字段和要搜索的值 条款term = new Term('id','1');
询问 所有查询类型的基础-TermQuery,BooleanQuery,PrefixQuery,RangeQuery,WildcardQuery,PhraseQuery等。 查询查询=新的TermQuery(term);
分析仪 从文本构建令牌,并帮助从文本构建索引词 新的StandardAnalyzer()

Lucene目录

目录–是Lucene在其上运行的数据空间。 它可以是文件系统或内存。

以下是常用的目录

目录 描述
FS目录 基于文件系统的目录 目录= FSDirectory.open(文件文件);
//文件->目录路径
RAM目录 基于内存的Lucene目录 目录=新的MemoryDirectory()

Directory = new MemoryDirectory(Directory dir)//将基于文件的目录加载到内存


创建索引条目

Lucene的“文档”对象是索引中使用的主要对象。 文档包含多个字段。 分析器在文档字段上进行工作,以将其分解为令牌,然后使用索引编写器写入目录。

索引作家

IndexWriter writer = new IndexWriter(indexDirectory, new StandardAnalyzer(Version.LUCENE_30), true, MaxFieldLength.UNLIMITED);

分析仪

将文本分析为要搜索的标记或关键字的工作。 Lucene提供的默认分析器很少。 分析器的选择定义了如何对索引文本进行标记和搜索。

以下是一些标准分析仪。

示例–分析器如何处理示例文本

定义字段索引的属性

  • 存储–是否应存储该字段以便将来检索
  • 分析–应将内容拆分为令牌
  • TermVECTOR –是否存储基于术语的详细信息


店铺:

是否应将该字段存储起来以便以后撤退

是的 存储值,以后可以从索引中检索
商店编号 不要储存。 与Index.ANALYZED一起使用。 当令牌仅用于搜索时


分析:

如何分析文字

索引分析 将文本分解为标记,对每个标记编制索引以使其可搜索
索引。NOT_ANALYZED 将整个文本作为单个标记编制索引,但不要进行分析(拆分)
Index.ANALYZED_NO_NORMS 与ANALYZED相同,但不存储规范
索引:NOT_ANALYZED_NO_NORMS 与NOT_ANALYZED相同,但没有规范
索引号
使此字段完全可搜索


词向量

相似,突出显示等需要术语详细信息

TermVector.YES 记录
每个文档中的唯一条款+计数+无位置+无偏移
TermVector.WITH_POSITIONS 记录
每个文档中的唯一条款+计数+位置+无偏移
TermVector.WITH_OFFSETS 记录
每个文档中的唯一条款+计数+无位置+抵消
TermVector.WITH_POSITIONS_OFFSETS 记录
每个文档中的唯一条款+计数+位置+偏移
TermVector.NO 不要记录术语向量信息

创建索引的示例

IndexWriter writer = new IndexWriter(indexDirectory, new StandardAnalyzer(Version.LUCENE_30), true,MaxFieldLength.UNLIMITED);Document document = new Document();
document.add(new Field('id', '1', Store.YES, Index.NOT_ANALYZED));
document.add(new Field('name', 'user1', Store.YES, Index.NOT_ANALYZED));
document.add(new Field('age', '20', Store.YES, Index.NOT_ANALYZED));
writer.addDocument(document);

更新索引的示例

IndexWriter writer = new IndexWriter(indexDirectory, new StandardAnalyzer(Version.LUCENE_30), true,MaxFieldLength.UNLIMITED);Document document = new Document();
document.add(new Field("id", "1", Store.YES, Index.NOT_ANALYZED));
document.add(new Field("name", "user1", Store.YES, Index.NOT_ANALYZED));
document.add(new Field("age", "20", Store.YES, Index.NOT_ANALYZED));
writer.addDocument(document);

删除索引的例子

IndexWriter writer = new IndexWriter(indexDirectory, new StandardAnalyzer(Version.LUCENE_30), MaxFieldLength.UNLIMITED);Term term = new Term('id', '1');
writer.deleteDocuments(term);

搜索索引: 用户以文本格式指定查询。 根据查询文本构建查询对象,对其进行分析,然后将执行的查询结果作为TopDocs返回。
查询是搜索的主要输入。

术语查询
布尔查询 是否(合并多个查询)

机器生成的替代文本:表36布尔查询运算符快捷方式详细语法快捷语法aANDb + a + b aORb ab aNDNOTb + a-b

前缀查询 以。。开始
通配符查询 ? 和*
– *开头不允许
词组查询 精确短语
范围查询 术语范围或数字范围
模糊查询 相似词搜索

样本查询

搜索示例:

IndexSearcher searcher = new IndexSearcher(indexDirectory);
Term term = new Term('id', '1');
Query query = new TermQuery(term);
TopDocs docs = searcher.search(query, 3);
for (int i = 1; i <= docs.totalHits; i++)
{System.out.println(searcher.doc(i));
}

Lucene诊断工具:

  • 卢克– http://code.google.com/p/luke/
    Luke是一个方便的开发和诊断工具,它可以访问现有的Lucene索引,并允许您以几种方式显示和修改其内容:
  • 豪华轿车– http://limo.sourceforge.net/
    这个想法是要有一个小的工具作为Web应用程序运行,它提供有关Lucene搜索引擎使用的索引的基本信息。

完整的例子:

在这里下载: LuceneTester.java

资源资源

  • http://lucene.apache.org/core/
  • http://www.amazon.com/Lucene-Action-Second-Edition-Covers/dp/1933988177/ref=dp_ob_title_bk

参考: Lucene –在Techie博客的Thoughts中,从我们的JCG合作伙伴 Srividhya Umashanker 快速添加了索引和搜索功能 。

翻译自: https://www.javacodegeeks.com/2012/12/lucene-quickly-add-index-and-search-capability.html

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

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

相关文章

《深入理解Java虚拟机》读书笔记3--垃圾回收算法

转载&#xff1a;http://blog.csdn.net/tjiyu/article/details/53983064 下面先来了解Java虚拟机垃圾回收的几种常见算法&#xff1a;标记-清除算法、复制算法、标记-整理算法、分代收集算法、火车算法&#xff0c;介绍它们的算法思路&#xff0c;有什么优点和缺点&#xff0c;…

Flex布局(一)flex-direction

采用Flex布局的元素&#xff0c;被称为Flex容器(flex container)&#xff0c;简称"容器"。其所有子元素自动成为容器成员&#xff0c;成为Flex项目(Flex item)&#xff0c;简称"项目" Flex-direction调整主轴方向&#xff08;默认为水平方向&#xff09;包…

登录网页后要弹出一个新标签_连永久链接都不会,还做什么新媒体?

上次给主编大大发的预览链接失效了&#xff0c;被骂得狗血淋头。大部分运营人可能都遇到过这种情况&#xff0c;忽视了预览生成的链接只是临时的&#xff0c;在12小时后或超过500阅读量后就会失效。一个疏忽&#xff0c;给自己带来了不必要的麻烦&#xff0c;耽误工作&#xff…

static_cast与dynamic_cast转换

static_cast与dynamic_cast转换   一 C语言中存在着两种类型转换&#xff1a; 隐式转换和显式转换 隐式转换&#xff1a;不同数据类型之间赋值和运算&#xff0c;函数调用传递参数……编译器完成 char ch;int i ch; 显示转换&#xff1a;在类型前增加 &#xff1a;&#xff…

vue使用iview Timeline 时间轴不显示问题

vue Timeline 时间轴不显示渲染的效果 官网代码 <Timeline pending><TimelineItem>发布1.0版本</TimelineItem><TimelineItem>发布2.0版本</TimelineItem><TimelineItem>发布3.0版本</TimelineItem><TimelineItem><a href…

Java EE 6 Web配置文件。 在云上。 简单。

Java SE还可以。 Java EE是邪恶的。 这就是我一直想的。 好吧&#xff0c;现在不再了。 让我分享我的经验。 几周前&#xff0c;我开始考虑将旧版spring hibernate tomcat应用程序移植到新平台上&#xff1a; SAP NetWeaver云 。 我知道您在极客那里的想法&#xff1a;…

Kubernetes核心概念总结

1、基础架构 1.1 Master Master节点上面主要由四个模块组成&#xff1a;APIServer、scheduler、controller manager、etcd。 APIServer。APIServer负责对外提供RESTful的Kubernetes API服务&#xff0c;它是系统管理指令的统一入口&#xff0c;任何对资源进行增删改查的操作都要…

php连接mysql数据,php连接mysql数据库

$sql_link mysql_connect("主机名","登入用户名","登入用户名密码");如果连接成功&#xff0c;就会返回一个mysql句柄,可以简单的理解成这个$sql_link 是php跟mysql的一个桥梁&#xff0c;通过该桥梁我们可以进入到mysql。进入到mysql之后&…

url存在宽字节跨站漏洞_利用WebSocket跨站劫持(CSWH)漏洞接管帐户

在一次漏洞悬赏活动中&#xff0c;我发现了一个使用WebSocket连接的应用&#xff0c;所以我检查了WebSocket URL&#xff0c;发现它很容易受到CSWH的攻击(WebSocket跨站劫持)有关CSWH的更多详细信息&#xff0c;可以访问以下链接了解https://www.christian-schneider.net/Cross…

php 数组对比 unset,如何区分PHP中unset,array_splice的区别

1.使用的函数a.函数unset()unset ( mixed $var , mixed $... ? ) : voidunset()销毁指定的变量。b.函数array_slice()array_splice(array,start,length,array)array表示数组。start表示删除元素的开始位置。length表示被移除的元素个数&#xff0c;也是被返回数组的长度。(可…

前端基础-CSS的各种选择器的特点以及CSS的三大特性

一、 基本选择器二、 后代选择器、子元素选择器三、 兄弟选择器四、 交集选择器与并集选择器五、 序列选择器六、 属性选择器七、 伪类选择器八、 伪元素选择器九、 CSS三大特性 一、 基本选择器 1、id选择器 #1、作用&#xff1a;根据指定的id名称&#xff0c;在当前界面中找…

使用JavaCV进行手和手指检测

这篇文章是Andrew Davison博士发布的有关自然用户界面&#xff08;NUI&#xff09;系列的一部分&#xff0c;内容涉及使用JavaCV从网络摄像头视频提要中检测手。 注意&#xff1a;可以从http://fivedots.coe.psu.ac.th/~ad/jg/nui055/下载本章的所有源代码。 第5章的彩色斑点检…

不能装载文档控件。请在检查浏览器的选项中检查浏览器的安全设置_【2020年网络安全宣传周】如何正确设置浏览器...

李夏是一个公司的职员&#xff0c;一天晚上加班赶制文档&#xff0c;由于要向客户汇报产品情况&#xff0c;需要获取大量网上信息&#xff0c;然而在制作中却发现浏览器的网页打不开了。第二天原计划向客户展示的材料未能完整汇总&#xff0c;客户见面对接效果也打了折扣。在当…

用装饰器设计模式装饰

装饰图案是广泛使用的结构图案之一。 此模式在运行时动态更改对象的功能&#xff0c;而不会影响对象的现有功能。 简而言之&#xff0c;此模式通过包装将附加功能添加到对象。 问题陈述&#xff1a; 想像一下我们有一个比萨饼&#xff0c;该比萨饼已经用番茄和奶酪烤制的情况。…

vcpkg安装_微软牌包管理器vcpkg更新及路线图计划

蝎子vcpkg是一套跨平台&#xff0c;开源的C/C库管理器&#xff0c;今天的这篇文章是有关vcpkg主题的2020年4月博文更新。在这篇文章中&#xff0c;我们将分享有关vcpkg 2020.04发布版本的一些信息以及vcpkg的路线图(roadmap)&#xff0c;我们会在这里持续地发布有关vcpkg的最新…

CSS 盒模型与box-sizing

一、盒模型 一个web页面由许多html元素组成&#xff0c;而每一个html元素都可以表示为一个矩形的盒子&#xff0c;CSS盒模型正是描述这些矩形盒子的存在。 MDN的描述&#xff1a; When laying out a document, the browsers rendering engine represents each element as a r…

Java课程设计 购物车系统(个人博客) 201521123052 蓝锦明

1. 团队课程设计博客链接 课程设计团队博客 2. 个人负责模块或任务说明 &#xff08;1&#xff09;制作图形菜单引导界面 &#xff08;2&#xff09;定义各获取和输出类函数 3. 自己的代码提交记录截图 4. 自己负责模块或任务详细说明 import java.text.NumberFormat; public c…

7-12(图) 社交网络图中结点的“重要性”计算(30 分)

在社交网络中&#xff0c;个人或单位&#xff08;结点&#xff09;之间通过某些关系&#xff08;边&#xff09;联系起来。他们受到这些关系的影响&#xff0c;这种影响可以理解为网络中相互连接的结点之间蔓延的一种相互作用&#xff0c;可以增强也可以减弱。而结点根据其所处…

linux系统的安装程序,Linux系统安装

为了不影响本机系统&#xff0c;建议在虚拟机上创建并安装Linux系统&#xff0c;本次安装centos7 64位的镜像。详细步骤如下&#xff1a;1、首先在虚拟机主页创建新的虚拟机。... 图1.1 2、选择自定义安装&#xff0c;这样方便我们更好了解虚拟机&#xff0c;然后点击下一步。.…

百米路由器2登陆地址_腾达无线路由器怎么安装,真的不错

腾达无线路由器怎么安装1、WAN口连接宽带进线(即网络公司进来的线或猫出来的线&#xff0c;一般颜色不一样)、LAN口连接局域网内的电脑。2、设置所连接电脑的IP地址。右键点击网上邻居属性3、右键点击本地连接属性4、选择Internet协议TCP/IP属性5、点击选择自动获得IP地址和自动…