初识lucene(想看代码的跳过)
最早是在百度贴吧里看到的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的索引过程。
本篇中有没说清楚或者有误的地方,欢迎指点,大家相互学习。
初识lucene(想看代码的跳过)的更多相关文章
- 【前端模板之路】一、重构的兄弟说:我才不想看你的代码!把HTML给我交出来!
写在前面 随着前端领域的发展和社会化分工的需要,继前端攻城湿之后,又一重要岗位横空出世——重构攻城湿!所谓的重构攻城湿,他们的一大特点之一,就是精通CSS配置文件的编写...前端攻城湿跟重构攻城湿是一 ...
- (转)【前端模板之路】一、重构的兄弟说:我才不想看你的代码!把HTML给我交出来!
原文地址:http://www.cnblogs.com/chyingp/archive/2013/06/30/front-end-tmplate-start.html 写在前面 随着前端领域的发展和社 ...
- php spl标准库简介(SPL是Standard PHP Library(PHP标准库)(直接看代码实例,特别方便)
php spl标准库简介(SPL是Standard PHP Library(PHP标准库)(直接看代码实例,特别方便) 一.总结 直接看代码实例,特别方便易懂 thinkphp控制器利眠宁不支持(说明 ...
- 初识lucene
lucene的介绍网上有好多,再写一遍可能有点多余了. 使用lucene之前,有一系列的疑问 为什么lucene就比数据库快? 倒排索引是什么,他是怎么做到的 lucene的数据结构是什么样的,cpu ...
- calltree看代码调用图
calltree是在linux下面看c代码(尤其是复杂的内核代码)的神器. 推荐 calltree+vim + ctags + cscope + taglist [ vim: 搭建vim看代码的环境 ...
- 免费的Lucene 原理与代码分析完整版下载
Lucene是一个基于Java的高效的全文检索库.那么什么是全文检索,为什么需要全文检索?目前人们生活中出现的数据总的来说分为两类:结构化数据和非结构化数据.很容易理解,结构化数据是有固定格式和结构的 ...
- CGAL代码阅读跳坑指南
CGAL代码阅读跳坑指南 整体框架介绍 CGAL中的算法和数据结构由它们使用的对象类型和操作参数化.它们可以处理满足特定语法和语义需求的任何具体模板参数.为了避免长参数列表,参数类型被收集到一个单独的 ...
- 使用tkinter打造一个小说下载器,想看什么小说,就下什么
前言 今天教大家用户Python GUI编程--tkinter 打造一个小说下载器,想看什么小说,就下载什么小说 先看下效果图 Tkinter 是使用 python 进行窗口视窗设计的模块.Tkint ...
- 【JavaScript基础】Js的定时器(你想看的原理也在哟)
[JavaScript基础]Js的定时器(你想看的原理也在哟) 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 说明 本章是经历 ...
随机推荐
- BZOJ 3265: 志愿者招募加强版 [单纯形法]
传送门 一个人多段区间,一样.... 不过国家队论文上说这道题好像不能保证整数解.... #include <iostream> #include <cstdio> #incl ...
- 运行自己的 DaemonSet - 每天5分钟玩转 Docker 容器技术(131)
本节以 Prometheus Node Exporter 为例演示如何运行自己的 DaemonSet. Prometheus 是流行的系统监控方案,Node Exporter 是 Prometheus ...
- GitLab简单使用
[权限] ①已经搭建了Gitlab服务器,并已开通 http://git.******.com 权限(每个公司的git地址不一致),登陆到git中去: ②已经开通了项目权限(有专人负责开通): 当开 ...
- HashMap----工作原理
先来些简单的问题 "你用过HashMap吗?" "什么是HashMap?你为什么用到它?" 几乎每个人都会回答"是的",然后回答HashMa ...
- jQuery smartMenu右键自定义上下文菜单插件
http://www.zhangxinxu.com/wordpress/?p=1667 <%@ page contentType="text/html; charset=UTF-8&q ...
- 使用腾讯云“自定义监控”监控GPU使用率
欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 作者:李想 随着人工智能以及比特币的火热,GPU云服务的使用场景是越来越广,在很多场景下我们也需要获取GPU服务器的性能参数来优化程序的执行.目 ...
- PowerDesigner 简单应用(转载)
PowerDesigner是一款功能非常强大的建模工具软件,足以与Rose比肩,同样是当今最著名的建模软件之一.Rose是专攻UML对象模型的建模工具,之后才向数据库建模发展,而PowerDesign ...
- 老男孩Python全栈开发(92天全)视频教程 自学笔记21
day21课程内容: json: #序列化 把对象(变量)从内存中 编程可存储和可传输的过程 称为序列化import jsondic={'name':'abc','age':18}with open ...
- 五子棋的判断输赢规则 -- java编程(简单优化完整版)
五子棋的判断输赢规则代码 -- 完整优化版 一.前言 之前浏览过很多网上的方法,但总找不到比较完整,也get不到其他大神的思路,就直接画图分析,分析了之后就有了如下的代码,当然还想到更加优化的一种,只 ...
- Java三大特性(封装,继承,多态)
Java中有三大特性,分别是封装继承多态,其理念十分抽象,并且是层层深入式的. 一.封装 概念:封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别:将抽象得到的数据 ...