全文检索是一种将文件中所有文本与检索项匹配的文字资料检索方法.比如用户在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. html标记语言 --表单

    html标记语言 --表单 七.表单 1.表单标记 1.1表单中的内容 <form></form>定义表单的开始位置和结束位置,表单提交时的内容就是<form>表单 ...

  2. 1028阿里RDS如何恢复云数据库MySQL的备份文件到自建数据库

    参照 https://help.aliyun.com/knowledge_detail/41817.html 恢复云数据库MySQL的备份文件到自建数据库 更新时间:2017-07-27 14:52: ...

  3. es6中参数【默认值,扩展运算符】

    参数默认值 1.普通参数 function info(age,name="grace"){ console.log(name); } info(); //输入:grace 2.对象 ...

  4. 机器学习基石:10 Logistic Regression

    线性分类中的是非题------>概率题, 设置概率阈值后,大于等于该值的为O,小于改值的为X.------>逻辑回归. O为1,X为0: 逻辑回归假设: 逻辑函数/S型函数:光滑,单调, ...

  5. Java 中的时间日期 API

    自从 14 年发布 Java 8 以后,我们古老 java.util.Date 终于不再是我们 Java 里操作日期时间的唯一的选择. 其实 Java 里的日期时间的相关 API 一直为世猿诟病,不仅 ...

  6. BZOJ4711 小奇挖矿

    Description [题目背景] 小奇在喵星系使用了无限非概率驱动的采矿机,以至于在所有星球上都采出了一些矿石,现在它准备建一些矿石仓 库并把矿石运到各个仓库里. [问题描述] 喵星系有n个星球, ...

  7. [Ahoi2005]LANE 航线规划

    题目描述 对Samuel星球的探险已经取得了非常巨大的成就,于是科学家们将目光投向了Samuel星球所在的星系——一个巨大的由千百万星球构成的Samuel星系. 星际空间站的Samuel II巨型计算 ...

  8. bzoj 2212: [Poi2011]Tree Rotations

    Description Byteasar the gardener is growing a rare tree called Rotatus Informatikus. It has some in ...

  9. hdu 1043(经典搜索)

    题意: 给你一个初始的图,然后每次输入一个图,要求移动x最小的步数达到和初始图一样,输出路径 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 5 6 7 8 5 6 7 8 5 6 7 ...

  10. java实现生产者/消费者的三种方式

    package com.wenki.thread; import java.util.LinkedList; import java.util.concurrent.LinkedBlockingQue ...