最早是在百度贴吧里看到的 lucene 这个名称, 只知道跟搜索引擎有关, 因为工作中一直以来没有类似的需求, 所以没有花时间学习这方面的知识
刚过完年, 公司不忙, 自己闲不住把 Netty 权威指南大致刷了起来 (后续有时间再把 Netty 这块的一些知识分享出来) 不过就在前几天, 领导突然说后面有个新项目准备让我来做, 目前还在整理需求中然后巴拉巴拉简单的跟我讲了一下, 大概就是说去年我给客户做了个小的 WAP 网站, 人家觉还行今年准备搞个大一点的, 门户 + 文库 + 机器人客服, 这个文库需要搜索功能, 用户在搜索框里面输入指定关键字, 需要匹配现有的文档附件里面的内容, 返回匹配成功的文档下载地址... 听到这个需求的时候, 我并没有因为自己没有做过类似的项目而慌张, 相反内心有种莫名的欣喜, 可能是因为我脑袋里闪过 Lucene 这个词, 借此机会可以好好的深入了解一下了
一周之前, 我对 Lucene 的认识正如 Lucene 实战 中所写的一样, 以为它是一个完整的搜索引擎, 后来才知道它是一个 信息检索工具库并不能拿来即用, 需要配合 java 来让它变成一个搜索引擎当然, Lucene 项目下还有一些子项目, 基于 Lucene 开发的, 可拿来即用, 如 solr,nutch 等, 感兴趣的可以百度搜索一下相关内容, 此处不再介绍
下面我就来现学现卖先带你认识一下 Lucene, 知道它的干什么的; 下一篇会写个简单的实例, 能让你快速用起来; 后面再慢慢的介绍一些概念和底层细节, 有助于深入理解 Lucene
1. 是什么
它是一款高性能可扩展的信息检索 (IR) 工具库, 信息检索是指文档 (txt,json,xml,csv 等) 搜索, 文档内容搜索及文档相关的一些元数据搜索等操作;
2. 能做什么
通过 Lucene 的几个核心类, 使你可以在不必深入了解全文索引和搜索机制的同时, 也能轻松的将它集成到自己的应用中 Lucene 的核心是索引和搜索, 它可以为文本文档内容添加索引, 使得你在搜索关键字的时候, 能迅速返回包含这些关键字的文档 Lucene 本身无法为 docx,pdf,xlsx 等格式的二进制格式文档添加索引, 因为他不做内容编码的处理但是借助 Tika 工具, 可以将这些二进制文档转换成文本形式, 来实现 Lucene 对这些文档支持当然, 内容的来源不仅仅局限于文件, 还可以是互联网资源, 数据库数据, 这些一般都由开发者自己处理, Lucene 也有现成的组件总之, Lucene 的核心专注于对内容的索引和搜索, 并不关心内容的来源
3. 浅谈索引和搜索
索引和搜索是 Lucene 的核心, 看过新华字典吗? 厚厚的一本新华字典, 如果我们要从中找一个字需要一页一页的翻吗? 当然不是, 字典的前几页有目录索引, 根据目录索引我们能快速定位到被查字的位置 Lucene 中的索引有着异曲同工的效果, 通过对文档内容分析, 提取出很多关键字(分词), 再为每个关键字添加位置信息(可能为多个), 这样我们就能通过关键字快速定位到文档位置, 提高搜索的速度有人可能不太理解为什么添加索引能提高搜索效率, 这么说你可能会懂: 拿中文文档来说, 汉字的数量和词的数量是有限的, 假设我现在为一万本中文书建立索引 , 那么我关键词的数量最多为 一本新华字典 + 现代汉语词典的量, 我为 2 万本书建立索引, 我关键词的数量是不是不会发生改变, 不过关键词下位置信息会增多对吧数据越多, 建立索引的时间会越长, 不过能换来搜索时间稳定, 很值
大致介绍了一下 Lucene 的用途和核心功能, 本篇到此结束下一篇会直接上个简单的实例, 让开发者能快速上手, 并且会详细介绍 Lucene 的索引过程
本篇中有没说清楚或者有误的地方, 欢迎指点, 大家相互学习
来源: https://www.cnblogs.com/RUN-TIME/p/8532912.html