前言

在日常开发中,我们经常遇到问题就会找度娘和谷歌,只要输入相关的关键字立马检索出相关的文档,我便可以参见相关的文档学习和了解自己想要的知识,这种强大的搜素功能是屡试不爽啊。这个强大的搜素功能就是靠搜索引擎来支撑的,是通过网络爬虫来访问网页然后抓取过来存取,然后再通过索引来映射对应的网页。具体百度如何实现这强大的检索功能,不是这里的重点,我们这里着重和大家一起学习总结一下Lucene在web开发中的使用,用简单粗暴的方式讲述一下lucene的原理和基础。

既生瑜何生亮

在lucene实现全文检索之前,当人们需要需要检索几篇文章中是否出现有某个关键的字符串。唯一的办法就是把所有的文章一篇一篇的检索一遍。然后才能确定哪几篇文章中包含该关键字,因为要检索所有的文章,所以整个过程的执行需要花费很长的时间,这种吃力不讨好的方式叫做“顺序扫描”,后来人们又发现了一种叫做”全文检索”的技术,这个技术是以Lucene为代表的另一种检索引擎。可能会有一些人会有疑问,既然”顺序扫描”已经可以实现功能,那么为何又要搞个什么”全文检索”。以Lucene为代表的”全文检索”有哪些优势呢?
我们日常生活中遇到的一篇文档,或者说数据库中的记录。他们记录着一些信息,但是需要注意的一点,这里面并不是所有的信息都是很重要的关键字,比如说,在一篇文章中,我们会经常看到“我们”,“你们”,“了”,“的”等其他非关键字,当我们遇到了难题,应该没有人会在百度的检索框输入“我们”然后让百度去检索吧,即使你输入了,百度勉为其难的给你返回了一些页面链接,然后你点进出,发现这些网页中的信息对于自己解决的问题丝毫没有作用,你可能会买骂道:“啥破百度,检索的啥”!开玩笑的,一般我们都知道自己输入哪些关键字。那么我们就可以将一篇文章中的关键字或者说结构化字符串提炼出来,然后建立一个由提炼出来的关键字和对应文档之间的映射,当下次有用户检索该关键字,我们我就将和该关键字相关的文档返回给用户,想必用户肯定能从文档中得到一些想要的信息。这样检索的效率就会有质的提升,而不必傻乎乎的检查一下所有的文章,看看哪几篇文章中有这个关键字。可能有些小伙伴发现了另外一个问题,其实我们在提炼文章的关键字,建立索引的过程中还是要检索所有的文章,这和“顺序扫描”有什么区别。其实肯定是有区别的,全文检索中,我们会在第一次检索数据之前,给所有的文章提炼关键字建立索引,之后就可以查询对应的索引,不需要每次查询的时候都需要建立索引,这样就实现了一次索引多次查询的目的。当我们经常检索大数据量的文档或者数据库的时候,建立索引的优势立马体现出来了。上面就是简单的讲解了什么是“全文检索”,以及他的优势。其实索引建立的过程可不是一句“提炼关键字,建立索引”就能搞定的。这里面涉及的,倒排索引,文档语义分析,分词,停止词,还有检索排序。这些概念我们在后面慢慢讲解。

Lucene的大体结构

说到全文检索,不得不提Lucene,他是实现一个全文检索的工具库,web开发中,我们可能通过这个工具库来为自己的应用添加全文检索功能。Lucene和我们自己的应用之间实现全文检索的原理大致可以参见下图

正如上图所示,我们将应用的数据库数据,文件系统的文档等其他数据,通过Lucene建立索引,应用检索查询的时候先查询索引,然后映射到对应的文档,然后再重新渲染给应用,返回给用户,这就是应用中利用Lucene实现全文检索的大致原理。
那么在Lucene中,索引的建立是怎样建立的,可以参见下图
上面通过指定的格式,将Lucene的Document传递给分词器Analyzer来进行分词,经过分词之后,通过索引写入工具将索引写入到指定的目录。
对于索引的索引的查询,可以分为下面的几个步骤

首先建立查询的Query,通过IndexSearcher进行查询,得到命中的TopDocs,然后再通过TopDocs的scoresDocs()方法得到ScoreDoc,通过ScoreDoc得到对应的文档编号,IndexSearcher通过文档编号,使用IndexReader对指定目录的索引进行读取,得到命中后的文档返回。

总结

上面简单介绍了一下Lucene的基本概念,对应Lucene的使用,后面会和大家一起总结使用!

白话Lucene原理相关推荐

  1. 免费的Lucene 原理与代码分析完整版下载

    Lucene是一个基于Java的高效的全文检索库. 那么什么是全文检索,为什么需要全文检索? 目前人们生活中出现的数据总的来说分为两类:结构化数据和非结构化数据.很容易理解,结构化数据是有固定格式和结 ...

  2. Lucene 原理与代码分析完整版

    原文地址为: Lucene 原理与代码分析完整版 Lucene 原理与代码分析系列文章已经基本告一段落,可能问题篇还会有新的更新. 完整版pdf可由以下链接下载. Lucene 原理与代码分析完整版 ...

  3. Lucene原理与代码分析(高手博客备忘)

    2019独角兽企业重金招聘Python工程师标准>>> 随笔 - 69  文章 - 77  评论 - 687 随笔分类 - Lucene原理与代码分析 Lucene 4.X 倒排索引 ...

  4. Lucene原理解析

    Lucene简介 Lucene是什么 Lucene是一个开源的全文检索引擎工具包,提供了完整的查询引擎合索引引擎,部分语种文本分析引擎 Lucene并不是一个完整的全文检索引擎,仅提供了全文检索引擎架 ...

  5. lucene原理讲解

    1 lucene简介 1.1 什么是lucene Lucene是一个全文搜索框架,而不是应用产品.因此它并不像http://www.baidu.com/ 或者google Desktop那么拿来就能用 ...

  6. Lucene原理剖析

    Lucene作为一个快速的检索框架,为中小型公司提供了一个快速接入搜索引擎的途径.其从创立之初,得到了开源社区的快速发展.其突出优势为快速的数据处理能力和TF-IDF的快速排序算法.本文从Lucene ...

  7. lucene原理介绍

    全文检索:是指以文本作为检索对象,找出含有指定词汇的文本. 全文检索功能的开发,要做的有两个方面: 1.索引库管理(维护索引库中的数据) 2.索引库中进行搜索. 而Lucene就是操作索引库的工具. ...

  8. lucene原理及java实现_Lucene字典的实现原理

    1Lucene字典 使用lucene进行查询不可避免都会使用到其提供的字典功能,即根据给定的term找到该term所对应的倒排文档id列表等信息.实际上lucene索引文件后缀名为tim和tip的文件 ...

  9. Elasticsearch原理学习(一)lucene原理

    无论是solr还是elasticsearch,其底层都是通过lucene来实现的,我们首先学下lucene的原理. 一.lucene简介 Lucene最初是由Doug Cutting开发的,在Sour ...

最新文章

  1. 自动删除指定文件夹下N天前文件的批处理
  2. xa 全局锁_分布式事务如何实现?深入解读 Seata 的 XA 模式
  3. SpringBoot——项目搭建、整合Mybatis、整合redis(集群)
  4. python编写es脚本_es数据迁移脚本(python)
  5. 使用Spring Boot开发Web项目
  6. css flexbox模型_CSS Flexbox在全国范围内的公路旅行中得到了解释
  7. 默写测试晋级流程 1126
  8. markdown 入门1--标题目录代码图片
  9. frame跨页传值/AJAX出错解决方案 + 知识补充:浏览器同源政策
  10. Android BroadcastReceiver之 静态广播 笔记+demo
  11. QScrollArea滚动条
  12. 从安装认识Angular 2
  13. 默认情况下安装的应用程序C盘后提示权限不足,当你开始介意。。。
  14. python基础教程书籍-Python基础教程(第2版)
  15. python如何输出整数逆序_python字符串类型及操作
  16. Linux教学项——基础环境及命令教学(包括实用shell脚本)
  17. java 时分秒 转换 秒_java实现时间格式转换(int整数类型的秒/毫秒---时分秒毫秒)...
  18. 设计模式之建造者模式与原型模式
  19. 二维码门禁助力于打造更智能化的出入管理-码上开门,说走就走
  20. 一篇“从入门到上手”的Solidworks机械设计教程

热门文章

  1. 惊天霹雳雷!网页游戏世界模仿秀TOP10评比
  2. 你不知道的 React v18 的任务调度机制
  3. TCP三次握手过程,如果两次握手会怎么样?
  4. 如何使用python语言调用旷世(Face++)应用
  5. 游戏开发51课 性能优化9
  6. 大数据建模、分析、挖掘技术应用的进阶之路
  7. chocolatey安装开发工具
  8. 如何识别和调节他人的情绪
  9. iOS 关于国外手机使用的本地日历时时间不一致的处理
  10. MySQL数据库连接查询(内连接)