Lucene架构
先整体上看一下Lucene的架构设计图(见下图),先看上层应用,首先是信息采集的过程,文件系统、数据库、万维网以及手工输入的文件都可以作为信息采集的对象,也是要搜索的文档的来源,采集万维网上的信息一般使用网络爬虫。完成信息采集之后到Lucene层面有两大任务:索引文档和搜索文档,索引文档的过程完成由原始文档到倒排索引的构建过程,搜索文档用以处理用户查询。应用层的第三部分就是用户接口,用户输入查询关键字,Lucen完成文档搜索任务,经过分词、匹配、评分、排序等一系列过程之后返回用户想要的文档。

一次完整的搜索从用户输入要查询的关键词开始到系统根据用户输入的关键字返回相关信息。一次检索大致可分为4步:
第一步:查询分析
正常情况下用户输入正确的查询,例如输入“python”这个关键词,用户输入正确完成一次搜索,但是搜索需求通常都是全开放的,任何的用户需求都是有可能的,很大一部分还是非常口语化和个性化的,有时候还会存在拼写错误,假如不小心把”python“达成“pythno”,这个时候就需要用自然语言处理技术来做拼写纠错等处理,以正确理解用户需求。
第二步:分词技术
这一步利用自然语言处理技术将用户输入的查询语句进行分词,如标准分词会把“lucene,全文检索框架”分成lucene|全|文|检|索|框|架,空格分词会分成:lucene,|全文检索框架|,二分法会变成:lucene|全文|文检|检索|索框|框架|,还有简单分词等多种分词方法。
第三步:关键字检索
提交关键词后在倒排索引库中进行匹配,倒排索引就是关键词和文档之间等对应关系,就像给文档贴上标签。比如文档集中含有lucene关键词的有文档1,文档6,文档9,含有全文检索的有文档1、文档6,那么做与运算,同时含有lucene和全文检索的文档的就是1和6,在实际的搜索中会有更复杂的文档匹配模型。
第四步:搜索排序
对多个相关文档进行相关度计算、排序,返回给用户检索结果。
Lucene架构的更多相关文章
- Lucene系列二:Lucene(Lucene介绍、Lucene架构、Lucene集成)
一.Lucene介绍 1. Lucene简介 最受欢迎的java开源全文搜索引擎开发工具包.提供了完整的查询引擎和索引引擎,部分文本分词引擎(英文与德文两种西方语言).Lucene的目的是为软件开发人 ...
- Lucene实现索引和查询
0引言 随着万维网的发展和大数据时代的到来,每天都有大量的数字化信息在生产.存储.传递和转化,如何从大量的信息中以一定的方式找到满足自己需求的信息,使之有序化并加以利用成为一大难题.全文检索技术是现如 ...
- Lucene:基于Java的全文检索引擎简介
Lucene:基于Java的全文检索引擎简介 Lucene是一个基于Java的全文索引工具包. 基于Java的全文索引/检索引擎--Lucene Lucene不是一个完整的全文索引应用,而是是一个用J ...
- lucene全文检索基础
全文检索是一种将文件中所有文本与检索项匹配的文字资料检索方法.比如用户在n个小说文档中检索某个关键词,那么所有包含该关键词的文档都返回给用户.那么应该从哪里入手去实现一个全文检索系统?相信大家都听说过 ...
- Lucene 4.0 正式版发布,亮点特性中文解读[转]
http://blog.csdn.net/accesine960/article/details/8066877 2012年10月12日,Lucene 4.0正式发布了(点击这里下载最新版),这个版本 ...
- lucene基本原理
1.术语 lucene 在存储它的全文索引结构时,是有层次结构的,这涉及到5个层次:索引(Index):段(Segment):文档(Document):域(Field):词(Term),他们的关系如下 ...
- Lucene:基于Java的全文检索引擎简介 (zhuan)
http://www.chedong.com/tech/lucene.html ********************************************** Lucene是一个基于Ja ...
- Lucene 全文检索入门
博客地址:http://www.moonxy.com 一.前言 Lucene 是 apache 软件基金会的一个子项目,由 Doug Cutting 开发,是一个开放源代码的全文检索引擎工具包,但它不 ...
- .Net Web开发技术栈
有很多朋友有的因为兴趣,有的因为生计而走向了.Net中,有很多朋友想学,但是又不知道怎么学,学什么,怎么系统的学,为此我以我微薄之力总结归纳写了一篇.Net web开发技术栈,以此帮助那些想学,却不知 ...
随机推荐
- 初学python类编的一个求矩形小程序
简单的程序不简单,里面包含类定义类,传参,初始化,方法调用,创建实例,格式输出.主要在python中随时定义变量随时用,我这道题题想好久就是我初识类,传参,不是所有参数都的加单引号.简单的东西,复杂话 ...
- 详细介绍Ubuntu 16.04系统环境安装Docker CE容器的过程
由于项目的需要,我们在很多软件配置环境中需要用到Docker容器,这个时候我们可以用自己的VPS主机搭建.在这篇文章中,笔者将会利用Ubuntu 16.04系统环境安装Docker CE容器的过程.如 ...
- 关于Opengl投影矩阵
读 http://www.songho.ca/opengl/gl_projectionmatrix.html 0.投影矩阵的功能: 将眼睛空间中的坐标点 [图A的视椎体] 映射到 一个 ...
- Linux相关问题总结
1.linux没有ifconfig命令 可以使用以下命令查询ip地址: ip addr show ifconfig命令在net-tools工具里,安装命令: yum install net-tools
- java基础知识—数组
1.数组:是一个变量,存储相同数据类型的一组数据. 2.数据的优点:减少代码量.易查找. 3.数组的使用步骤: 1)声明数组:int scores []: 2)开辟空间:scores = new in ...
- 纯css实现评分
用到的知识点: E:checked:单选或复选框被选中 E ~ F: 选择后面的兄弟节点们:选择后面的兄弟节点 E::after,E::before: 伪元素选择器 在匹配E的元素后面(前面)插入内容 ...
- 纯js星级评分
@{ Layout = null;} <!DOCTYPE html> <html><head> <meta name="viewport" ...
- .Net Core+Angular6 学习 第二部分(创建Angular6项目)
. 创建angular6 前提: 需要安装nodejs以及angular的脚手架,Angular官网要求Angular6.0必须在node 8.x 和 npm 5.x 以上的版本才能正常使用. 我的版 ...
- c++ cin cin.getline() getline()用法
http://www.cnblogs.com/AndyJee/p/3821067.html 主要内容: 1.cin用法 2.cin.getline()用法 3.getline()用法 3.注意的问题 ...
- dos3章
FOR命令中有一些变量,他们的用法许多新手朋友还不太了解,今天给大家讲解他们的用法! 先把FOR的变量全部列出来: ~I - 删除任何引号("),扩展 %I %~f ...