lucene原理学习笔记(一)

最近在学习lucene原理方面的知识,将学习中学到的知识和问题记录下来,今天学习的主要内容就是关于索引方面的内容。我们知道lucene是实现全文检索的工具包,要在工程里面加入搜索的功能还需要基于lucene的api进行开发。那么全文检索的步骤分为哪几步呢。全文检索大体上分为两个步骤,索引的创建和搜索索引。于是乎全文检索就涉及到如下几个问题:

1.如何创建索引。2.如果搜索索引。3.索引里面存储的信息都有什么。

索引里面存储的都有什么信息呢,可以用一下的例子来说明,一个文件包含多个字符,当要查询一个文件中是否包含某个字符串的时候,也就是已知文件,想要查询字符串相对容易,也即从文件到字符串的映射,而全文检索要解决的问题是给定一个字符串查询出来那几个文件包含这个字符串,也就是已知字符串求文件,即从字符串到文件的映射。如果索引能够存储从字符串到文件的映射关系,则会大大提高检索的速度。由于从字符串到文件的映射是文件到字符串的映射的反向过程,所以保存的这种信息被称为反向索引

反向索引保存的信息一般如下:

假设我的文档集合里面有100个文档,为了方便表示,为文档编号,从1到100,得到如下图所示的结构。

左边保存的是字符串,称为词典

每个字符串指向的是包含此字符串的文档链表,此文档链表称为倒排表

有了索引便使保存的信息和要搜索的信息保持一致,加快了搜索的速度。

比如说我们要搜索即包含solr和hadoop的文档,可以分为以下步骤,

1.通过solr的倒排表取到包含solr的文档链表。

2.通过hadoop的字符串去到包含hadoop的文档链表。

3.通过合并前面两步得到的文档链表即可找到即包含solr又包含hadoop的文档列表,加快了查找的速度。

虽然查找变的方便了,但是多了创建索引的过程,但是通过索引查找的优势就是索引建好之后就不必在重新创建了,可以达到一次创建多次使用的效果。

创建索引的过程一般如下:

第一步.一些要索引的源文档(Document),为了说明以字符串为例,如以下字符串:

Students should be allowed to go out with their friends, but not allowed to drink beer.

第二步.将源文档传给分词组件,分词组件一般做以下几件事情:

1.将文档分成一个一个的单词。

2.去除标点符号。

3.去掉停词。所谓停词就是指那些最普通的单词,由于没有特别的意义,不能区分不同的文档,因而大多数情况下不能成为搜索的关键词。

经过分词得到的结果成为词元

第三步,将得到的词元传给语言处理组件。

语言处理组件主要是针对得到的词元做一些语言方面的处理。比如在英语里面把词元变成小写,将单词转为词根等。经过语言处理组件得到的信息叫做

第四步,将得到的词传给索引组件。

索引组件主要做以下几件事情:1,利用得到的词创建一个字典。2,对字典按字母顺序进行排序。2,合并相同的词成为倒排列表。

到此创建索引的过程就完成了。

时间: 2024-10-22 15:01:50

lucene原理学习笔记(一)的相关文章

lucene原理学习笔记(二)

上一篇文章介绍了Lucene的索引结果以及建立索引的步骤,这篇文章就介绍一下如何搜索索引. 第一步,用户输入查询语句. 第二步,对查询语句进行词法分析.语法分析以及语言处理. 1.词法分析主要用来识别单词和关键字. 2.语法分析主要根据查询语句的语法规则来形成一棵语法树. 3.语言处理同索引过程中的语言处理几乎一致,比如词根的处理. 第三步,搜索索引,得到符合语法树的文档. 第四步,计算得到的文档和查询之间的相关性,对查询结果进行排序. 如何来计算文档和查询之间的相关性呢?在此做一个假设,我们将

编译原理学习笔记 -- 绪论1

1. 语言处理器 语言处理系统 _________ 经过预 _______ 源程序 --> |预处理器| --> 处理的 --> |编译器| --> 目标汇编程序 -------- 源程序 ------- _______ 可重定位的 ______________ --> |汇编器| --> 机器代码 --> |链接器/加载器| --> 目标机器代码 ------- -------------- ↑ 库文件/可重定位对象文件 预处理器:把源程序聚合在一起,并宏

Unity3D 骨骼动画原理学习笔记

最近研究了一下游戏中模型的骨骼动画的原理,做一个学习笔记,便于大家共同学习探讨. ps:最近改bug改的要死要活,博客写的吭哧吭哧的~ 首先列出学习参考的前人的文章,本文较多的参考了其中的表述: 1.骨骼动画详解 :http://blog.csdn.net/ccx1234/article/details/6641944,不过这篇文章的原文已经被csdn封了:D,可以看看对应的转载的文章也行 2.OpenGL10-骨骼动画原理篇:http://www.cnblogs.com/zhanglitong

编译原理学习笔记(十一)错误处理

错误处理 说明:以老师PPT为标准,借鉴部分教材内容,AlvinZH学习笔记. 1. 目标:编译程序对于语法和语义正确的源程序要正确地编译生成等价的目标代码:而对于错误的源程序不能一发现就停止,而是要能检查出错误的性质和出错位置,并使编译能继续下去,同时尽可能多而准确地发现错误和指出各种错误. 2. 编译器的错误处理能力 诊察各类错误的能力. 报错及时准确(出错位置,错误性质). 一次编译找出错误的多少. 改正错误的能力. 遏制重复错误信息的能力. 3. 错误分类:语法错误.语义错误. 语法错误

Lucene/Solr学习笔记(一)

solr简介 Solr是一个开源的,企业级搜索服务器.Solr可以理解为Lucene的服务器化产品.它使用java编写,遵循http协议和xml协议,使用多种数据格式(如json,xml)传递数据. 但她不是对Lucene的一次简单封装,Solr的大多数特征都与Lucene不同.Solr 和 Lucene 的界限经常是模糊的.以下是Solr的主要特性: 通过HTTP请求来     建立索引和搜索索引 拥有数个缓存 来 加快搜索速度 一个基于web的管理员控制台 运行时做性能统计,包括缓存 命中/

TCP/IP协议原理学习笔记

昨天学习了杨宁老师的TCP/IP协议原理第一讲和第二讲,主要介绍了OSI模型,整理如下: OSI是open system innerconnection的简称,即开放式系统互联参考模型,它把网络协议从逻辑上分为了7层.即如上图所示: 1.物理层:主要定义物理设备标准,如网线的接口类型.光纤的接口类型.各种传输介质的传输速率等.它的主要作用是传输比特流(就是由1.0转化为电流强弱来进行传输,到达目的地后在转化为1.0,也就是我们常说的数模转换与模数转换).这一层的数据叫做比特. 2.数据链路层:定

JVM原理学习笔记

最近在阅读 <Inside the JVM> 这本书,结合一些日常工作学习中的感想,随便写一些东西,蜻蜓点水,不必有章法. 关于“单例同步”:     一直有人在问单例对象的并发调用是否需要同步,基本属于“月经帖”了,答案是现成的满天下都是,但真正能让人心里踏实下来的解释寥寥无几.实际上,只要学习了一些JVM的运行原理,解释这个问题就不难了.     如果一个类是单例的,比如某些DAO的设计,那么所有的线程来访问这个类的实例的时候,它们获得的都将是同一个对象,这是不言自明的.如果这些线程的当前

硬件原理学习笔记

1. 硬件是思想的载体,基础为物理学. 人的五感(视觉.听觉.触觉.嗅觉.味觉)接收了大部分的信息: 世界在人的各种感官下形成了对应的映像,然后人类对各种信息作出分析,并对世界做出一定的反馈操作. 这个世界是按一定的原理运行的,而且物质的成份和数量在现实世界中都是预定的. 物质的组成和关系对应软件中的数据结构:物质的状态变化规律对应算法: 2. 为何要了解世界的运作规律和物质构成? 当被刺的时候,本能的反应会痛:当被噪音环绕时,本能会被孤立:总之,人只能在一定的条件下生存,在此条件外就无法适应和

数据挖掘原理学习笔记【1】 绪论

学习绪论,可以让我们从大方向上对一本书有一个总体的把握,从一定的高度俯瞰过后,才能更加清楚每个小部分的意义所在. 即使是绪论,也是有干货的! 1.1 数据挖掘简介 本书中采用如下的数据挖掘定义:数据挖掘就是对观测到的数据集(经常是很庞大的)进行分析,目的是发现未知的关系和以数据拥有者可以理解并对其有价值的新颖方式来总结数据. 上面定义中所说的“观测到的数据”,是与“实验得到的”数据相对而言的,一般来说数据挖掘所处理的数据都是为了其他某个目的已经收集好的,是“顺便的”或者“机会的”样本,而不是为了