Lucene原理之概念
概念:
数据分两种:
1、结构化数据:指具有固定格式或有限长度的数据,如数据库,元数据等。
2、非结构化数据:指不定长或无固定格式的数据,如邮件,word文档等。(半结构化数据:如XML,HTML等,当根据需要可按结构化数据来处理,也可抽取出纯文本按非结构化数据来处理)
非结构化数据又一种叫法叫全文数据。因此:全文索引就是非结构化的数据索引。Lucene就是全文索引库。
全文检索大体分两个过程,索引创建 (Indexing) 和搜索索引 (Search) 。
索引创建:将现实世界中所有的结构化和非结构化数据提取信息,创建索引的过程。
搜索索引:就是得到用户的查询请求,搜索创建的索引,然后返回结果的过程。
于是全文检索就存在三个重要问题:
1. 索引里面究竟存些什么?(Index)
2. 如何创建索引?(Indexing)
3. 如何对索引进行搜索?(Search)
一、索引结构:
索引由字典+倒排表组成。
字典:就是我们需要搜索的词。
倒排表:建立了字典和文档的映射。(每个字符串都指向包含本身的文档链表)
图:


排序(平分):
df:Document Frequency 即文档频次,表示总共有多少文件包含此词(Term)。
tf:Term Frequency 即词频率,表示此文件中包含了几个此词(Term)。
二、创建索引:
创建索引的步骤:
1、需要索引的文档。
2、将文档分词(Tokenizer)
分词的需要做的事情:
1)、去除标点。
2)、去除停词(所谓停词就是一种语言中最普通的一些单词,由于没有特别的意义,因而大多数情况下不能成为搜索的关键词,因而创建索引时,这种词会被去掉而减少索引的大小)。
3)、分词得到词元(字典)。
3、将词元(Token)传递给语言处理组件(Linguistic Processor)。
对于英语,语言处理组件(Linguistic Processor) 一般做以下几点:
1)、变为小写(Lowercase) 。
2)、将单词缩减为词根形式,如“cars ”到“car ”等。这种操作称为:stemming 。
3)、将单词转变为词根形式,如“drove ”到“drive ”等。这种操作称为:lemmatization(词型还原) 。
4、将得到的词(Term)传给索引组件(Indexer)。
索引组件(Indexer)主要做以下几件事情:
1)、利用得到的词(Term)创建一个字典。
2)、对字典按字母顺序进行排序。
3)、合并相同的词(Term) 成为文档倒排(Posting List) 链表。
三、搜索索引:
搜索的步骤:
1、用户输入查询语句。举个例子,用户输入语句:lucene AND learned NOT hadoop。
2、对查询语句进行词法分析,语法分析,及语言处理。
1)、词法分析主要用来识别单词和关键字。
2)、语法分析主要是根据查询语句的语法规则来形成一棵语法树。
3)、语言处理同索引过程中的语言处理几乎相同。
3、搜索索引,得到符合语法树的文档。
此步骤有分几小步:
1)、首先,在反向索引表中,分别找出包含lucene,learn,hadoop的文档链表。
2)、其次,对包含lucene,learn的链表进行合并操作,得到既包含lucene又包含learn的文档链表。
3)、然后,将此链表与hadoop的文档链表进行差操作,去除包含hadoop的文档,从而得到既包含lucene又包含learn而且不包含hadoop的文档链表。
4)、最后,此文档链表就是我们要找的文档。
4、根据得到的文档和查询语句的相关性,对结果进行排序。
Term Frequency (tf):即此Term在此文档中出现了多少次。tf 越大说明越重要。
Document Frequency (df):即有多少文档包含次Term。df 越大说明越不重要。
ref:
https://www.cnblogs.com/forfuture1978/category/300665.html
Lucene原理之概念的更多相关文章
- Atitit WebDriver技术规范原理与概念
Atitit WebDriver技术规范原理与概念 1. Book haosyo ma1 2. WebDriver是W3C的一个标准,由Selenium主持.1 3. WebDriver如何工作 (z ...
- 免费的Lucene 原理与代码分析完整版下载
Lucene是一个基于Java的高效的全文检索库.那么什么是全文检索,为什么需要全文检索?目前人们生活中出现的数据总的来说分为两类:结构化数据和非结构化数据.很容易理解,结构化数据是有固定格式和结构的 ...
- Lucene的基本概念----转载yufenfei的文章
Lucene的基本概念 Lucene是什么? Lucene是一款高性能.可扩展的信息检索工具库.信息检索是指文档搜索.文档内信息搜索或者文档相关的元数据搜索等操作. 信息检索流程如下: 1. 将即将检 ...
- Lucene解析 - 基本概念
Elasticsearch 权威指南中文版 https://www.elastic.co/guide/cn/elasticsearch/guide/cn/index.html 对于跳跃表,我们看 ...
- lucene原理及源码解析--核心类
马云说:大家还没搞清PC时代的时候,移动互联网来了,还没搞清移动互联网的时候,大数据时代来了. 然而,我看到的是:在PC时代搞PC的,移动互联网时代搞移动互联网的,大数据时代搞大数据的,都是同一伙儿人 ...
- lucene原理
lucene查找原理: https://yq.aliyun.com/articles/581877
- springAOP原理以及概念
需求:1.拦截所有业务方法2.判断用户是否有权限,有权限就让他执行业务方法,没有权限就不允许执行.(是否有权限是根据user是否为null作为判断依据) 思考: 我们该如何实现? 思路1: 我们在每个 ...
- 《lucene原理与代码分析》笔记
1.全文索引相对于顺序扫描的优势:一次索引,多次使用 2.创建索引的步骤:(1)要索引的原文档 (2)将原文档传给分词组件(Tokenizer)分词组件会做如下事情:(此过程称为Tokenize)a. ...
- Spring框架IOC和AOP的实现原理(概念)
IoC(Inversion of Control) (1). IoC(Inversion of Control)是指容器控制程序对象之间的关系,而不是传统实现中,由程序代码直接操控.控制权由应用代码中 ...
随机推荐
- linux将指令加入开机启动或加入环境变量
以mongodb运行指令为例,/usr/local/webserver/mongodb/bin/mongo 1,linux将指令加入环境变量PATH 简单说PATH就是一组路径的字符串变量,当你输入的 ...
- ie 8及以下 前端cors ajax跨域须知
http://www.cnblogs.com/xishuai/p/jquery-ajax-ie8-cors.html
- IECapt、CutyCapt 生成网页快照
IECapt.CutyCapt 生成网页快照 http://iecapt.sourceforge.net/ http://cutycapt.sourceforge.net/ 1.以管理员身份 运行c ...
- 3.3.1 Validations
摘要: 出处:黑洞中的奇点 的博客 http://www.cnblogs.com/kelvin19840813/ 您的支持是对博主最大的鼓励,感谢您的认真阅读.本文版权归作者所有,欢迎转载,但请保留该 ...
- leetcode-139-单词拆分(递归超时,动归解决)
题目描述: 给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词. 说明: 拆分时可以重复使用字典中的单词. 你可以假设字 ...
- Scala代码开发 metaTable(元表)
使用Scala语言开发时,自动生成get和set方法 不用写return进行返回, 因为它的最后一行就是返回值 先建立四个层(层层递进) domain 表结构的建立 repository(DAO) 实 ...
- Hyper-V如何新建虚拟机
http://www.xitongtiandi.net/wenzhang/soft/24543.html
- 洛谷 P4774 / loj 2721 [NOI2018] 屠龙勇士 题解【同余】【exgcd】【CRT】
推导过程存在漏洞+exCRT板子没打熟于是期望得分÷实际得分=∞? 题目描述 小 D 最近在网上发现了一款小游戏.游戏的规则如下: 游戏的目标是按照编号 \(1\sim n\) 顺序杀掉 \(n\ ...
- poj3207 Ikki's Story IV - Panda's Trick 2-SAT
题目传送门 题意:在一个圆上顺时针安放着n个点,给出m条线段连接端点,要求线段不相交,线段可以在圆内也可以在圆外,问是否可以. 思路:假设一条线段,放在圆外是A,放在园内是A',那么两条线段如果必须一 ...
- Mac下使用crontab来实现定时任务
说明: 1.Linux和Mac下操作crontab都是一致的 2.配置文件都在/etc/crontab下,如果没有就创建. 3.测试发现直接使用crontab -e命令创建的定时任务是放在临时文件夹的 ...