第一章 初识Lucene
多看几遍,慢就是快
1.1 应对信息爆炸
1.2 Lucene 是什么
1.2.1 Lucene 能做些什么
1.2.2 Lucene 的历史
1.3 Lucene 和搜索程序组件
基本概念
索引操作
将原始数据引入可被高效查找的对照表中,以便能够对这些内容进行快速搜索。
这里的对照表的结构是什么样的?是二叉排序树还是红黑树?
索引是一个精心设计的数据结构。
1.3.1 索引组件
获取内容
如果内容是存在文件系统特定目录下的XML文档,或者是组织有序的数据库中的内容,获取内容很简单。
但是如果分散在各个地方会复杂。对于使用权限管理的系统(权限管理是指系统只允许用户访问其对应权限的文档)来说,获取内容这一步将变得更加复杂。因为这时需要用”超级用户“权限来获取内容(可能会用到黑客技术)。
内容获取模块在访问规模比较大的内容集时,或者是一天变化比较大的内容集时,以增量的方式运行,是持续运行的后台服务,能实时获取新文档信息或者内容改变文档的信息,并在能够访问时获取这些文档的内容。
Lucene作为一款核心搜索库,并不提供任何功能来实现内容获取。内容获取的实现完全依赖于你自己的应用程序或者某一款其他软件。
大量的开源爬虫软件可以实现这个功能,比如:solr,Nutch,Grub,Heritrix,Drods,aperture,谷歌企业连接管理工程
如果你的应用程序结构比较松散的话,那最好是使用已有的爬虫工具。
建立文档
将内容转换成文档,以供搜索引擎使用。文档主要包括几个带值的域,比如标题、正文、摘要、作者和链接。
内容=》文档过滤器转换处理=》文档。因为目前的文件格式大多是二进制格式的(PDF文件,Microsoft Office文件、Open Office文件、Adobe Flash文件、视频流和音频多媒体文件),或者包含一些在索引操作前必须去除的固定标记(RDF、XML、HTML)。
有时由于复杂的商业逻辑,需要创建额外的域
也可以连接某个分离的数据存储区域(例如数据库)原始内容,并将这些内容合并成一个单独的文档提供给搜索引擎。
向单个文档和域插入加权值。加权可以在进行索引操作前静态完成;也可以在搜索期间动态完成。
包括Lucene在内的几乎所有的搜索引擎都会自动地静态地对内容较短的域进行加权。这在直觉上是能说通的:如果要在一个很长的文档中匹配一两个单词,那么匹配结果一定不如在三四个单词长的文档中匹配同样的单词切题。
上面这句话可以这样理解:既然较短的文档出现了这两个单词,说明这两个单词占据了主要的语义,这两个单词在较短的文档中更加重要;相比很长的文档中出现了这两个单词,说明很长的文档中的这两个单词相对不是很重要,很有可能不是主要语义,是附带语义。
文档分析
将文本分割成一系列被称之为语汇单元的独立的原子元素。
Lucene提供了大量内嵌的分析器能让你轻松控制这步操作。
文档索引
文档被加入到索引列表
1.3.2 搜索组件
搜索质量主要由查准率和查全率来衡量。
搜索引擎的典型组件如下:
用户搜索界面
建立查询
搜索查询
常见的搜索理论模型有如下3种:
纯布尔模型,向量空间模型,概率模型
展现结果
1.3.3 搜索程序的其他模块
管理界面
分析界面
搜索范围
搜索范围有两种界定方式:净处理内容和净查询吞吐量
Lucene并没有提供有关搜索范围的处理模块。但是apache Lucene项目下的Solr和Nutch项目都提供了对索引拆分和复制的支持。Katta开源项目基于Lucene的,它也提供这个功能。Elastic search提供了另一个选择,它也是基于Lucene的开源项目。
1.3.4 Lucene 与应用程序的整合点
1.4 Lucene 实战:程序示例
1.4.1 建立索引
使用Indexer索引文本文件
运行Indexer
命令如下:
ant Indexer
1.4.2 搜索索引
用Searcher来实现搜索
版本号参数
运行 Searcher
命令如下:
ant Searcher
1.5 理解索引过程的核心类
1.5.1 IndexWriter
写索引
1.5.2 Directory
描述了Lucene索引的存放位置,它是一个抽象类
1.5.3 Analyzer
1.5.4 Document
1.5.5 Field
文档可能拥有不止一个同名的域。在这种情况下,域的值就按照索引操作顺序添加进去。在搜索时,所有域的文本就好像连接在一起,作为一个文本域来处理。
这个地方有疑问?难道同名的域,下一次操作不会覆盖上一次操作?
1.6 理解搜索过程的核心类
1.6.1 IndexSearcher
用于搜索由IndexWriter类创建的索引
1.6.2 Term
Term对象是搜索功能的基本单元。
Term对象包含一对字符串元素:域名和单词(或域文本值)
searcher.search(q,10)
Finds the top n
hits for query
.
1.6.3 Query
1.6.4 TermQuery
1.6.5 TopDocs
1.7 小结
第一章 初识Lucene的更多相关文章
- Java 面向对象编程——第一章 初识Java
第一章 初识Java 1. 什么是Java? Java是一种简单的.面向对象的.分布式的.解释的.安全的.可移植的.性能优异的多线程语言.它以其强安全性.平台无关性.硬件结构无关性.语言简 ...
- 第一章 初识shiro
shiro学习教程来自开涛大神的博客:http://jinnianshilongnian.iteye.com/blog/2018936 第一章 初识shiro 简单了解shiro主要记住三张图即可. ...
- Cocos2d-x 3.0 红孩儿私家必修 - 第一章 初识Cocos2d-x 3.0project
第一章 初识Cocos2d-x 3.0project Cocos2d-x 3.0出来了,听说与之前版本号相比修改较大 做为一个游戏开发人员.我们应该欢迎Cocos2d-x持续的更新和强大,Coc ...
- C语言编程入门之--第一章初识程序
第一章 初识程序 导读:计算机程序无时不刻的影响着人类的生活,现代社会已经离不开程序,程序的作用如此巨大,那么程序到底是什么呢?本章主要讨论程序的概念,唤起读者对程序的兴趣,同时对C语言程序与其它语言 ...
- Java 第一章 初识Java
第一章笔记 什么是计算机程序:算机为完成某些功能生产的一系列有序指令集合 Java技术包括: java SE:标准版 java EE:企业版 Java ME:移动版 开发Java程序步骤:1.编写 2 ...
- 第一章 初识数据库Mysql
初识数据库Mysql(my) 在企业中 percona: 一.数据库基础知识 Mysql是一个开放源代码的数据库管理系统(DBMS),它是由Mysql AB公司开发.发布并支持的.Mysql是一个 ...
- 第一章 初识Mysql
Mysql是一个开放源代码的数据库管理系统(DBMS),它是由MySQL AB 公司开发.发布并支持的. 登录 -- mysql #本地登录,默认用户root,空密码,用户为root@127.0.0. ...
- Windows Forms编程实战学习:第一章 初识Windows Forms
初识Windows Forms 1,用C#编程 using System.Windows.Forms; [assembly: System.Reflection.AssemblyVersion(& ...
- 第一章 初识MVC4
1.MVC模式 Mvc将应用程序分离为三个部分: Model:是一组类,用来描述被处理的数据,同时也定义这些数据如何被变更和操作的业务规则.与数据访问层非常类似. View:是一种动态生成HTML的模 ...
随机推荐
- jQuery键盘控制方法,以及键值(keycode)对照表
键盘控制应用范围非常广泛,比如快捷键控制页面的滚动:在填写表单时候,限制输入内容:或者是屏蔽复制.粘贴.退后等功能.这里说说用jQuery怎么来实现.个人觉得jQuery比原生态的JS好用,代码简单清 ...
- 15 3Sum(寻找三个数之和为指定数的集合Medium)
题目意思:给一个乱序数组,在里面寻找三个数之和为0的所有情况,这些情况不能重复,增序排列 思路:前面2sum,我用的是map,自然那道题map比双指针效率高,这道题需要先排序,再给三个指针,i.j.k ...
- javascript 读取内联之外的样式(style、currentStyle、getComputedStyle区别介绍) (转载)
样式表有三种方式: 内嵌样式(inline Style) :是写在Tag里面的,内嵌样式只对所有的Tag有效. (也称作“内联样式”) 内部样式(internal Style Sheet):是写在 ...
- wamp环境网站根目录更改
1.修改wampserver的默认目录 安装好wampserver后,网站根目录默认为:安装目录\wamp\www,也就是wampserver安装目录下的www文件夹. 我们以更改为:D\www为例. ...
- delphi 创建数据库配置文件(TIniFile)
一.有必要了解INI文件的结构: ;注释 [小节名] 关键字=值 ... ---- INI文件允许有多个小节,每个小节又允许有多个关键字, “=”后面是该关键字的值. ---- 值的类型有三种:字符串 ...
- python运维开发之第十天
一.多进程 1.进程模块 multiprocessing 简单的创建一个进程 #!/usr/bin/env python # -*- coding: utf- -*- # @Author : Will ...
- Fedora 19+ 启动顺序调整
首先找到Windows 8的menuentry cat /boot/grub2/grub.cfg | grep Windows 设置Windows 作为默认的启动项 grub2-set-default ...
- android 休眠唤醒机制分析(三) — suspend
本文转自:http://blog.csdn.net/g_salamander/article/details/7988340 前面我们分析了休眠的第一个阶段即浅度休眠,现在我们继续看休眠的第二个阶段 ...
- Solr4.8.0源码分析(3)之index的线程池管理
Solr4.8.0源码分析(3)之index的线程池管理 Solr建索引时候是有最大的线程数限制的,它由solrconfig.xml的<maxIndexingThreads>8</m ...
- 阿里云服务器重启后mysql不能启动的问题
环境:阿里云ECS服务器上,Ubuntu linux 12.04,64位版.MySQL 5.1. 首先查看/etc/rc.local,可以看到Ubuntu通过/etc/init.d/mysqld脚本启 ...