Lucene的原理和应用

Lucene搜索引擎原理与代码实例讲解 Lucene搜索引擎原理与代码实例讲解 关键词:搜索引擎, 全文检索, 倒排索引, 查询优化, 索引构建, 分词, 评分器 1. 背景介绍 1.1 问题由来 在信息爆炸的互 阅读详情

    随着互联网的迅速普及与发展,网络舆论对社会生活的影响力越来越大, 网络口碑研究也逐渐形成一个新兴行业。有效的网络口碑研究,需要全方位地倾听网民的声音。 信息检索技术的应用,有效地提高了网络口碑研究的工作效率。
    Lucene
作为当今最知名的开源信息检索库,被广泛应用于各种与全文检索相关的项目中。 本文将简要介绍Lucene的基本原理与应用,在此抛砖引玉,希望能有机会与更多的同行进行交流。

Lucene是什么

    Lucene 是一个开源的、成熟的全文索引与信息检索(IR)库,采用Java实现。它在系统中的地位,相当于一个主要用来全文检索的数据库,与系统其它模块的关系如下:


Lucene与数据库的类比

  Lucene与数据库有许多相通之处,以下我们做个简单对比:


数据库
Luecene
基本概念
列 / 字段
Field
行 / 记录
Document
基本操作
查询 (SELECT)
Searcher
添加 (INSERT)

IndexWriter. addDocument

删除 (DELETE)
IndexReader.delete
修改 (UPDATE)
不支持 ( 可删除后重新添加 )

Lucene与倒排索引(Inverted index)

  我想很多人在用数据库时,都遇到过这种类似的情况:查找含‘奥运会’这个词的数据, 一般都用 LIKE '%奥运会%' 作为条件的SQL语句进行。 这种解决方法,在数据量很大时,存在严重的性能问题。因为一般的数据库索引,对这种查询没有任何帮助。 Lucene作为主要应用于全文检索领域的库,引入了一种倒排索引的技术。

● 相关概念
     Term = Field.name + Token.text
     Token
分词后的最小单位,如:2008年、奥运会、将、在、北京、举行
     Document
每个Document有个唯一的内部编号ID(int类型),重建索引时ID可能变化
●
倒排索引文件格式(示意图)
     Term1 DocID1 DocID2 DocID3 …
     Term2 DocID1 DocID2 DocID3 …
     … …

  从以上格式中不难看出,利用这种索引文件,可以迅速定位到包含‘奥运会’这个词的所有文章。

中文分词与信息检索模型

    在上面的索引格式中可以看到,在建索引前,需要将一句话拆分为一个个词,这里就要用到中文分词技术。 常见中文分词算法:正向最大匹配法、逆向最大匹配法、基于统计的分词方法;  需要说明的是:Lucene仅提供了分词接口(没有中文分词实现),因此一般还有用到另外的第三方中文分词库。
    
当检索到含‘奥运会’这个词的文章共有1万篇时,哪些应该排在最前面呢?这就涉及到Lucene的评分机制,默认Lucene评分采用的是信息检索中的向量空间模型理论。
    
关于中文分词和信息检索模型,这是很大的一个研究课题。感兴趣的朋友,可以到网上搜索相关文章进行深入了解;

使用lucene的常见问题与建议

● 中文分词库: 网上可用的免费中文分词库有 IKAnalyzer(免费但不开源)、Stanford(开源但需自行封装lucene接口)
●
组合查询条件:通过使用QueryParser类,可以支持AND、OR等多种组合条件
●
结果排序: lucene默认按评分排序,通过结合Sort与SortField类,可指定多个排序字段与升降序,排序字段的索引类型必须为UN_TOKENIZED
●
分布式查询: 通过lucene提供的RemoteSearchable类,可以实现分布式查询
●
并行查询: 当分布式有多个节点时,可以通过ParallelMultiSearcher进行并行,以提高检索性能
●
分词与查询: 当索引中以‘奥运会’作为一个词时,通过‘奥运’是无法检索到相应结果的。这个问题可以通过修改检索条件或分词时按较小粒度进行处理
●
数字与日期: 因lucene索引库一律按String类型处理,因此数字日期应补0,使能够正确按字符串比较排序
●
字段索引类型:email日期等无需分词的字段,索引类型应选择UN_TOKENIZED
●
线程安全性: 应保证同时只有一个线程对lucene库进行写操作,可以有多个线程对lucene库进行读操作

参考文档资源

● lucene 官方网站
     
http://lucene.apache.org/
● lucene in action
中文版 (最权威的lucene电子书)
     
http://book.youkuaiyun.com/bookfiles/276/index.html
●
数学之美 系列文章 (最简明的相关技术科普)
     
http://www.langtech.org.cn/?uid-343-action-spacelist-type-blog




Lucene分词原理与代码实例讲解 Lucene分词原理与代码实例讲解 作者:禅与计算机程序设计艺术 / Zen and the Art of Computer Programming 关键词: Lucene,分词,文本搜索,倒排索引,Java 1. 背景介绍 阅读详情

相关推荐

Lucene原理与代码实例讲解

Lucene原理与代码实例讲解 作者:禅与计算机程序设计艺术 / Zen and the Art of Computer Programming 1. 背景介绍 1.1 问题的由来 随着互联网的飞速发展,信息的爆炸式增长为人们带来了

AI天才研究院 541

《Lucene应用开发揭秘》视频源码分享

大家好, 与大家分享一些Lucene开发的学习资料,对开发入门或者是想提升技术高度的同学可能会比较有用。 [b]下载地址:[/b] 下面对该课程的内容做简单介绍: [b]内容简介[/b]   本课程不局限于如何使用Lucene,而是以Lucene为实例,通过对各模块的深入解析介绍搜索引擎各个模块的设计原理与实现,进而能够跳出Lucene看到搜索引擎系统的架构全貌以及设计思...

iteye_12687的博客 471

lucene应用开发揭秘 第四讲

lucene应用开发揭秘 第四讲

Lucene 4.X 全套教程

http://www.cnblogs.com/forfuture1978/category/300665.html Lucene 4.X 倒排索引原理与实现: (3) Term Dictionary和Index文件 (FST详细解析) 摘要: 我们来看最复杂的部分,就是Term Dictionary和Term Index文件,Term Dictionary文件的后...

akde35246的博客 387

MapGIS地质剖面图绘制实战:从数据准备到整饰出图

本文详细解析了MapGIS地质剖面图绘制的全流程,从数据准备到整饰出图,涵盖了等高线处理、GRD格网化、比例尺控制等关键步骤。通过实战技巧和案例分析,帮助地质工作者高效完成专业地质剖面图绘制,提升矿产勘探和工程勘察的工作效率。

weixin_28335283的博客 592

单片机通信总述——理论部分(CAN、串口、SPI、I2C等)

并行通信:传输原理:数据各个位同时传输;优点:速度快; 缺点:占用引脚资源多。是指使用 8、16、32 及 64 根或更多的数据线(有多少信号为就需要多少信号位)进行传输的通讯方式,可以同一时刻传输多个数据位的数据。串行通信: 传输原理:数据按位顺序传输;优点:占用引脚资源少; 缺点:速度相对较慢。是指设备之间通过一根数据信号线,地线以及控制信号线,按数据位形式一位一位地传输数据的通讯方式,同一时刻只能传输一位(bit)数据。 单工: 数据传输只支持数据在一个方向上传输。信息只能单方向传输的工作方式,一

qq_42475191的博客 1万+

免费的Lucene 原理与代码分析完整版下载

Lucene是一个基于Java的高效的全文检索库。那么什么是全文检索,为什么需要全文检索?目前人们生活中出现的数据总的来说分为两类:结构化数据和非结构化数据。很容易理解,结构化数据是有固定格式和结构的或者有限长度的数据,比如数据库,元数据等。非结构化数据则是不定长或者没有固定格式的数据,如图片,邮件,文档等。还有一种较少的分类为半结构化数据,如XML,H...

weixin_34342992的博客 247

CMOS sensor 基础

NA

m0_72053187的博客 1657

Lucene详解

一.lucene原理     Lucene 是apache软件基金会一个开放源代码的全文检索引擎工具包,是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎。它不是一个完整的搜索应用程序,而是为你的应用程序提供索引和搜索功能。lucene 能够为文本类型的数据建立索引,所以你只要能把你要索引的数据格式转化的文本的,Lucene 就能对你的文档进行索引和搜索。比如你要对一些

jofjhh 1万+

【ROS】Nav2源码之nav2_collision_monitor(碰撞监测)详解

nav2_collision_monitor碰撞监视器是一个节点,为机器人提供了一个额外的安全级别。它使用来自传感器的数据,执行若干与避免碰撞相关的任务,绕过成本图和轨迹规划器,监测是否需要紧急停止或者减速。

郭老二 1455

UG\NX二次开发 获取三平面交点

//如果返回值不为0 则此三个面没交点 int three_faces_point(tag_t tagFace1, tag_t tagFace2, tag_t tagFace3, double *dou_x, double *dou_y, double *dou_z)

王牌飞行员_里海的博客 674

深入揭秘Lucene:全面解析其原理与应用场景(一)

Lucene是由Doug Cutting于1999年创建的一个全文搜索引擎库。Doug Cutting最初是为了创建一个基于全文搜索的邮件存档系统而开始开发Lucene。在最初的几年里,Lucene主要被用于开发用于搜索和索引大规模文本数据的应用程序。随着Lucene的功能和性能不断提升,它逐渐被广泛应用于各种领域,如搜索引擎、电子商务、知识管理等。2001年,Apache Software Foundation 接管了Lucene项目,并将其作为Apache的开源项目进行维护和发展。

凛鼕将至的博客 2729

YOLO11涨点优化:知识蒸馏 | 引入FGD(Focal and Global Distillation)蒸馏,让轻量学生模型汲取大模型全局感知力

文章摘要 目标检测模型YOLO11在轻量化部署中存在"全局盲区"问题,即轻量模型感受野不足导致大尺度场景下性能下降。知识蒸馏技术FGD(Focal and Global Distillation)通过双分支机制有效解决这一问题:Focal Distillation分离前景背景特征,让学生模型聚焦关键区域;Global Distillation传递像素间关系信息,弥补全局感知缺陷。实验表明,FGD可使YOLO11轻量版mAP提升2.5%以上,且不增加推理耗时。本文详细解析了FGD原理,并给出YOLO11上的实

2601_95807009的博客 226

一步一步跟我学习lucene(10)---lucene搜索之联想词提示之suggest原理和应用

昨天了解了suggest包中的spell相关的内容,主要是拼写检查和相似度查询提示; 今天准备了解下关于联想词的内容,lucene的联想词是在org.apache.lucene.search.suggest包下边,提供了自动补全或者联想提示功能的支持; InputIterator说明 InputIterator是一个支持枚举term,weight,payload三元组的供suggester使

wuyinggui的专栏 5475

Qt 调用YOLO模型(代码)

本文介绍了如何在 Qt C++ 环境中集成 YOLO 模型进行目标检测,包括模型封装、界面设计和实时处理等关键步骤。通过这种方法,你可以快速开发出具有目标检测功能的 Qt 应用程序,应用于监控系统、机器人视觉、图像分析等多个领域。

轩宇的博客 259

PCL 使用点云创建数字高程模型DEM【2025最新版】

使用点云创建数字高程模型DEM,并将结果保存为高程图像。博客长期更新,本文最近更新时间为:2025年9月15日。

点云侠的博客 2294

Lucene 查询原理

Lucene 是一个基于 Java 的全文信息检索工具包,目前主流的搜索系统Elasticsearch和solr都是基于lucene的索引和搜索能力进行。想要理解搜索系统的实现原理,就需要深入lucene这一层,看看lucene是如何存储需要检索的数据,以及如何完成高效的数据检索。在数据库中因为有索引的存在,也可以支持很多高效的查询操作。不过对比lucene,数据库的查询能力还是会弱很多,本文就将探索下lucene支持哪些查询,并会重点选取几类查询分析lucene内部是如何实现的。

大叶子不小的博客 1649

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

lucene学习总结篇--lucene全文检索的基本原理和lucene API简单的使用

一、常用的jar包 先介绍一下常用的几个文件jar包。下面有maven pom.xml参考 lucene-core:其中包括了常用的文档,索引,搜索,存储等相关核心代码 lucene-analyzers-common:这里面包含了各种语言的词法分析器,用于对文件内容进行关键字切分,提取。 lucene-highlighter:这个jar包主要用于搜索出的内容高亮显示。

chen 4287

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Lucene Solr 811

文章目录solrlucene倒排索引实际举例lucene API 介绍创建索引新建 maven 项目,添加依赖创建测试类,添加以下代码查看索引运行 luke查看文档指定分词器,并测试分词查询测试从索引查询solr 安装把 solr-8.1.1.tgz 传到服务器解压 solr启动 solr浏览器访问 solr 控制台创建 core复制默认配置创建名为 pd 的 core中文分词测试中文分词工具 -...

wanght笔记 2万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Lucene介绍与应用

Lucene介绍与应用 一、全文检索介绍 1.数据结构 结构化数据: ​ 指具有“固定格式” 或“限定长度”的数据; ​ 例如:数据库中的数据、元数据…… 非结构化数据 ​ 指不定长度或无固定格式的数据; ​ 例如:文本、图片、视频、图表…… 2.数据的搜索 顺序扫描法 ​ 从第一个文件扫描到最后一个文件,把每一个文件内容从开头扫到结尾,直到扫完所有的文件。 全文检索法 ​ 将非结构化数据中的一...

易佐良的博客 657

lucene_Lucene组件概述

lucene 本文是我们名为“ Apache Lucene基础知识 ”的学院课程的一部分。 在本课程中,您将了解Lucene。 您将了解为什么这样的库很重要,然后了解Lucene中搜索的工作方式。 此外,您将学习如何将Lucene Search集成到您自己的应用程序中,以提供强大的搜索功能。 在这里查看 ! 目录 1.信息超载/爆炸 2.索引非结构化数据的组件 3.数...

最佳 Java 编程 219

Lucene底层 索引原理

  基于Lucene检索引擎我们开发了自己的全文检索系统,承担起后台PB级、万亿条数据记录的检索工作,这里向大家分享下Lucene底层...

MayMatrix 的博客 525

白话Lucene原理

前言在日常开发中,我们经常遇到问题就会找度娘和谷歌,只要输入相关的关键字立马检索出相关的文档,我便可以参见相关的文档学习和了解自己想要的知识,这种强大的搜素功能是屡试不爽啊。这个强大的搜素功能就是靠搜索引擎来支撑的,是通过网络爬虫来访问网页然后抓取过来存取,然后再通过索引来映射对应的网页。具体百度如何实现这强大的检索功能,不是这里的重点,我们这里着重和大家一起学习总结一下Lucene在web开发中的

爱琴孩的博客 557
上一篇: Python字符串处理算法 (一)
下一篇: 数据之美
CICTech
博客等级 码龄19年 26粉丝 20原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值