全文检索是一种将文件中所有文本与检索项匹配的文字资料检索方法.比如用户在n个小说文档中检索某个关键词,那么所有包含该关键词的文档都返回给用户。那么应该从哪里入手去实现一个全文检索系统?相信大家都听说过apache的开源项目lucene,下面就从零开始揭开全文检索的面纱。

1.信息检索整体流程

一次完整的搜索从用户输入要查询的关键词开始,比如想查找lucene的相关学习资料,我们都会Google或百度中输入关键词,比如输入“lucene, 全文检索框架”,之后系统根据用户输入的关键词返回相关信息。一次检索大致可分为四步:

  • 第一步:输入关键词
  • 第二步:分词技术

    这一步利用自然语言处理技术将用户输入的查询语句进行分词,如标准分词会把“lucene, 全文检索框架”分成:lucene | 全 | 文 | 检 | 索 | 框 | 架 | ,空格分词会分成:lucene, | 全文检索框架 | ,二分法会分成:lucene | 全文 | 文检 | 检索 | 索框 | 框架 |,还有简单分词等多种分词方法.
  • 第三步:关键词检索

    提交关键词后在倒排索引库中进行匹配,倒排索引就是关键词key和文档之间的对应关系,就像给文档贴上标签。比如在检索库中含有lucene关键词的有文档1、文档6、文档9,含有全文检索的有文档1,文档6,那么做与运算,同时含有lucene和全文检索的文档就是1和6.
  • 第四步:

    对多个相关文档进行相关度计算、排序,返回给用户检索结果.

2.lucene架构

这张图很清楚的表现了lucene的工作原理:把文件系统、数据库、网页、手工输入的数据都集合起来,结构化、半结构化、非结构化数据整合在一起,建立成索引库。用户提交查询以后通过索引建设到文档,反馈给用户搜索结果.

3.文档、域、词元

文档:文档时lucene索引和搜索的基本单位.比如,一篇小说,一个word文档.

域:文档中的信息,比如小说标题、作者、简介等.

词元:对标题这个域进行分词,可以得到一个或多个词元.

4.词元权重计算

df:term frequency。 term在文档中出现的频率.tf越大,词元越重要.

tf:document frequecy。有多少文档包含此term,df越大词元越不重要.

词元权重计算公式: W(t,d)=tf(t,d)*log(n/df(t))

W(t,d):the weight of the term in document d

tf(t,d):the frequency of term t in document d

n:the number of documents

df(t):the number of documents that contain term t

5.余弦相似性

我们知道,两个向量的夹角越小,向量越相似,夹角为0时余弦值为1,方向相反时余弦值为-1.用户的输入通过分词形成用户查询向量V(q)={w1,w2,w3…wn},文档的多个词元构成文档向量D。通过计算文档向量和用户查询向量的相似性返回前N个最相似的给用户.

lucene全文检索基础的更多相关文章

  1. Apache Lucene(全文检索引擎)—创建索引

    目录 返回目录:http://www.cnblogs.com/hanyinglong/p/5464604.html 本项目Demo已上传GitHub,欢迎大家fork下载学习:https://gith ...

  2. Lucene全文检索技术

    Lucene全文检索技术 今日大纲 ●    搜索的概念.搜索引擎原理.倒排索引 ●    全文索引的概念 ●    使用Lucene对索引进行CRUD操作 ●    Lucene常用API详解 ●  ...

  3. Lucene 全文检索入门

    博客地址:http://www.moonxy.com 一.前言 Lucene 是 apache 软件基金会的一个子项目,由 Doug Cutting 开发,是一个开放源代码的全文检索引擎工具包,但它不 ...

  4. Lucene全文检索_分词_复杂搜索_中文分词器

    1 Lucene简介 Lucene是apache下的一个开源的全文检索引擎工具包. 1.1 全文检索(Full-text Search)  1.1.1 定义 全文检索就是先分词创建索引,再执行搜索的过 ...

  5. Lucene 全文检索

    基于 lucene 8 1 Lucene简介 Lucene是apache下的一个开源的全文检索引擎工具包. 1.1 全文检索(Full-text Search) 全文检索就是先分词创建索引,再执行搜索 ...

  6. 使用Lucene全文检索并使用中文版和高亮显示

    使用Lucene全文检索并使用中文版和高亮显示 中文分词需要引入 中文分词发的jar 包,咱们从maven中获取 <!-- lucene中文分词器 --> <dependency&g ...

  7. lucene 全文检索工具的介绍

    Lucene:全文检索工具:这是一种思想,使用的是C语言写出来的 1.Lucene就是apache下的一个全文检索工具,一堆的jar包,我们可以使用lucene做一个谷歌和百度一样的搜索引擎系统 2. ...

  8. Lucene 全文检索 Lucene的使用

    Lucene  全文检索  Lucene的使用 一.简介: 参考百度百科: http://baike.baidu.com/link?url=eBcEVuUL3TbUivRvtgRnMr1s44nTE7 ...

  9. Apache Lucene(全文检索引擎)—分词器

    目录 返回目录:http://www.cnblogs.com/hanyinglong/p/5464604.html 本项目Demo已上传GitHub,欢迎大家fork下载学习:https://gith ...

随机推荐

  1. BeautifulSoup重点复习

    html = """ <html><head><title>The Dormouse's story</title>< ...

  2. Linux OpenGL 实践篇-3 绘制三角形

    本次实践是绘制两个三角形,重点理解顶点数组对象和OpenGL缓存的使用. 顶点数组对象 顶点数组对象负责管理一组顶点属性,顶点属性包括位置.法线.纹理坐标等. OpenGL缓存 OpenGL缓存实质上 ...

  3. 手写java虚拟机(一)——搭建环境

    毕业设计打算做一个java虚拟机,首先要对java虚拟机有一个简单的了解(jvm).目前市面上有众多的jvm,如sun公司的HotSpot VM.Classic VM,IBM公司的J9 VM等等,这里 ...

  4. UEditor Golang上传图片与附件

    UEditor图片与附件上传官方只支持ASP.ASP.NET.JSP.PHP四种语言版本,Golang就不在其中.因为自己开发系统的需要,我照着UEditor服务器端的接口自己实现了一个Golang版 ...

  5. Thread源码剖析

    前言 昨天已经写了: 多线程三分钟就可以入个门了! 如果没看的同学建议先去阅读一遍哦~ 在写文章之前通读了一遍<Java 核心技术 卷一>的并发章节和<Java并发编程实战>前 ...

  6. [LeetCode] Accounts Merge 账户合并

    Given a list accounts, each element accounts[i] is a list of strings, where the first element accoun ...

  7. [LeetCode] Kill Process 结束进程

    Given n processes, each process has a unique PID (process id) and its PPID (parent process id). Each ...

  8. Java操作属性文件与国际化

    在前面讲到的java类集中的Hashtable中,有一个子类Properties,此类定义如下: public class Properties extends Hashtable<Object ...

  9. [BZOJ 4589]Hard Nim

    Description 题库链接 两人玩 \(nim\) 游戏,\(n\) 堆石子,每堆石子初始数量是不超过 \(m\) 的质数,那么后手必胜的方案有多少种.对 \(10^9+7\) 取模. \(1\ ...

  10. UOJ #206. 【APIO2016】Gap

    Description Solution 第一个子任务,直接从 \((a[i],a[j])\) 推出 \((a[i+1],a[j-1])\) 就行了,只需要 \(\frac{N+1}{2}\) 第二个 ...