1.1 简介

1.1.1 什么是全文检索

  全文检索是 20世纪末产生的一种新的信息检索技术。经过几十年的发展,特别是以计算机技术为代表的新一代信息技术应用,使全文检索从最初的字符串匹配和简单的布尔逻辑检索技术演进到能对超大文本、语音、图像、活动影像等 非结构化数据 进行综合管理的复合技术。由于内涵和外延的深刻变化,全文检索系统已成为新一代管理系统的代名词,衡量全文检索系统的基本指标和全文检索的内涵也发生巨大变化。

1.1.2 数据分类

  前面我们提到了非结构化数据,那么是不是还有结构化数据,是的,我们生活中的数据总体分为两种:结构化数据和非结构化数据。他们分别又是什么样的数据呢?结构化数据指具有固定格式或有限长度的数据,如数据库中的表数据。非结构化数据:指不定长或无固定格式的数据,如文本、图片、音频等。除了这两种之外,有些书籍还有一种类型,称之为半结构化数据,如 HTML、XML。

1.2 为什么需要全文检索

1.2.1 结构化数据搜索

id title time author content
1 斗破苍穹 2009 天蚕土豆 《斗破苍穹》
2 斗罗大陆 2009 唐家三少 《斗罗大陆》
3 遮天 2010 辰东 《遮天》
4 佛本是道 2006 梦入神机 《佛本是道》

  如上表所示,这是一个数据库表 book,若我们需要查询作者为辰东的数据则使用 SELECT * FROM book WHERE author = "辰东" 即可;若我们需要查询名称中包含斗的数据则使用 SELECT * FROM book WHERE title LIKE "%斗%" 即可。当 book 中数据量变大,将所有小说都收录进去,这时搜索将变慢。我们常用分库分表、建索引来进行数据库优化。

1.2.2 什么是索引

  对列值创建排序存储,数据结构={列值、行地址}。在有序数据列表中就可以利用二分查找或其他查找方法快速找到要查找的行的地址,再根据地址直接取行数据,与在表中搜索所有的行相比,索引有助于更快地获取信息。索引的一个主要目的就是加快检索表中数据,我们一般进行全文检索时都是模糊查询,那么在数据库中的索引对于模糊查询有没有作用呢。详见 ☞ MySQL 索引




  由以上分析可知,数据库适合结构化数据的精确查询,而不适合非结构化数据的模糊查询及灵活搜索,特别是数据量大时,无法提供想要的实时性。MySQL 也提供了分词索引,在数据量不是很大时可以考虑使用这种。

1.2.3 非结构化数据搜索

☞ 顺序扫描法(Serial Scanning)

  所谓顺序扫描,比如要找内容包含某一个字符串的文件,就是一个文档一个文档的看,对于每一个文档,从头看到尾,如果此文档包含此字符串,则此文档为我们要找的文件,接着看下一个文件,直到扫描完所有的文件。如利用windows的搜索也可以搜索文件内容,只是相当的慢。

☞ 全文检索(Full-text Search)

  将非结构化数据中的一部分信息提取出来,重新组织,使其变得有一定结构,然后对此有一定结构的数据进行搜索,从而达到搜索相对较快的目的。这部分从非结构化数据中提取出的然后重新组织的信息,我们称之索引。
  例如:字典。字典的拼音表和部首检字表就相当于字典的索引,对每一个字的解释是非结构化的,如果字典没有音节表和部首检字表,在茫茫辞海中找一个字只能顺序扫描。然而字的某些信息可以提取出来进行结构化处理,比如读音,就比较结构化,分声母和韵母,分别只有几种可以一一列举,于是将读音拿出来按一定的顺序排列,每一项读音都指向此字的详细解释的页数。我们搜索时按结构化的拼音搜到读音,然后按其指向的页数,便可找到我们的非结构化数据——也即对字的解释。
  这种先建立索引,再对索引进行搜索的过程就叫全文检索(Full-text Search)。虽然创建索引的过程也是非常耗时的,但是索引一旦创建就可以多次使用,全文检索主要处理的是查询,所以耗时间创建索引是值得的。

1.3 倒排索引

1.3.1 什么是倒排索引

  传统方法是根据文件找到该文件的内容,在文件内容中匹配搜索关键字,这种方法是顺序扫描方法,数据量大、搜索慢。而倒排索引是根据内容、词语找文档,倒排索引结构也叫反向索引结构,包括索引和文档两部分,索引即词汇表,它的规模较小,而文档集合较大。

1.3.2 分词器

  既然要根据词语来反查文档,那么可定要先提取文档中的词语,例如:中国码农,我们很自然的就将其分为 中国码农。但是计算机并不知道谁更谁在一起是一个词语,极有可能将其分为 中国国码码农。所以我们就需要一个分词器来进行分词操作。在国内我们常用分词器有 IKAnalyzer、mmseg4j。
  有人可能会问,数据库数据多了之后会变慢,难道当文档足够多时,使用分词器不会造成数据量多导致速度慢吗?是的,根据百度百科记录牛津英语词典至目前为止收录词语 61W,现代汉语词典字数加词数共 10W。这代表使用分词器分词是由数量限制的。

1.4 全文检索实现

1.4.1 Lucene

  Lucene 是 apache 软件基金会的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene 的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。

1.4.2 Elasticsearch

  Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful web 接口。Elasticsearch 是用 Java 语言开发的,并作为 Apache 许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch 用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在 Java、.NET、PHP、Python、Apache Groovy、Ruby 和许多其他语言中都是可用的。根据 DB-Engines 的排名显示,Elasticsearch 是最受欢迎的企业搜索引擎。

1.4.3 Solr

  Solr 是一个高性能,采用 Java 开发,基于 Lucene 的全文搜索服务器。同时对其进行了扩展,提供了比 Lucene 更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。 在 DB-Engines 的排名中仅次于 Elasticsearch

【全文检索_01】核心理论相关推荐

  1. 【百家稷学】深度学习与计算机视觉核心理论与实践(中国地质大学实训)

    继续咱们百家稷学专题,本次是有三AI在中国地质大学进行的暑期课程教学.百家稷学专题的目标,是走进100所高校和企业进行学习与分享. 分享主题 本次分享是在中国地质大学机械与电子信息学院进行,主题是&l ...

  2. 【视频课】一课掌握模型设计核心理论与实战技巧

    课程介绍 模型的设计是整个深度学习领域的通用基础,不管是从头设计自己的神经网络,还是对已有模型进行优化获得更高的任务指标,更快的运行速度,获得更小的模型体积,都需要掌握各类网络的设计技巧,是深度学习算 ...

  3. Java 并发编程—核心理论

    原文作者:liuxiaopeng 原文地址:Java 并发编程:核心理论 目录 一.共享性 二.互斥性 三.原子性 四.可见性 五.有序性 六 总结 并发编程是Java程序员最重要的技能之一,也是最难 ...

  4. java并发数据共享机制_Java并发编程:核心理论之数据共享性

    原标题:Java并发编程:核心理论之数据共享性 并发编程是Java程序员最重要的技能之一,也是最难掌握的一种技能.它要求编程者对计算机最底层的运作原理有深刻的理解,同时要求编程者逻辑清晰.思维缜密,这 ...

  5. 计算机最基础的核心理论——布尔逻辑

    布尔逻辑是计算机最基础的核心理论,为什么这么说呢?因为不管是我们使用的手机电脑或是其它的智能设备都是基于存储芯片和处理芯片,虽然这些芯片的外观和构成都不同,但它们的基本模块却是一样的,都是基于逻辑门构 ...

  6. 顾泽苍:新一代人工智能——产业推动的核心理论

    各位专家.各位来宾,辛苦了!请稍微允许我做一个简短的讲演,今天在中国的光谷人工智能的盛会上,我想奉献一个新一代人工智能产业推动的核心理论,这将是一个全新的人工智能的模型.在这里我想分三个部分介绍,一是 ...

  7. 3蛋白wb_【Western-Blotting】WB核心理论:抗原抗体特异性反应

    在<谁发明了Western-Blotting?>中我们提到,Western-Blotting(WB)起源于核酸印迹--Southern Blotting和Northern Blotting ...

  8. Istio服务网格进阶①:Istio服务网格核心理论概念

    Istio服务网格核心理论概念 文章目录 Istio服务网格核心理论概念 1.什么是Istio服务网格 1.1.Istio服务网格的介绍 1.2.Istio服务网格微服务治理的功能 1.3.Istio ...

  9. 【基于物理的渲染(PBR)白皮书】(二) PBR核心理论与渲染光学原理总结

            本文由@浅墨_毛星云 出品,首发于知乎专栏,转载请注明出处           文章链接: https://zhuanlan.zhihu.com/p/56967462 这是[基于物理的 ...

  10. 云原生核心技术之Istio服务网格核心理论概念(一)

    Istio服务网格核心理论概念 文章目录 Istio服务网格核心理论概念 1.Service Mesh基本概念 1.1.什么是Service Mesh服务网格 1.2.服务网格的特点 1.3.服务网格 ...

最新文章

  1. Zotero科研文献管理 - 将PDF文件同步到Google Driver中,不同电脑无缝使用
  2. [使用心得]maven2之m2eclipse使用手册之六使用Maven2插件创建一个简单的SSH2项目之jetty篇(一)...
  3. SAP Spartacus B2B table的配置信息的merge原理
  4. Unbuntu 自动重启MySQL
  5. HH SaaS电商系统的品牌模块设计
  6. Linux 匿名页的反向映射
  7. mysql执行语句出来全是问号_为什么mysql运行代码后结果栏中的中文全部变成问号?...
  8. [论文阅读] Maintaining Discrimination and Fairness in Class Incremental Learning
  9. jQuery实现百度导航li拖放排列效果,即时更新数据库
  10. 【学时总结】 ◆学时·IV◆ 数位DP
  11. android volley框架详解,android通信框架volley详解(一)
  12. 东北大学22春学期《概率论X》在线平时作业123
  13. Computer:路由器连接交换机怎么建立局域网
  14. iWebShop核心团队启动shukai新域名,进入全案SEO网络营销领域发力SEO众包外包服务
  15. 数据库作业:第四章:数据库安全性 习题
  16. iOS内存管控实战(上)—原理篇
  17. dell出现插入耳机无提示,无反应
  18. 广义线性混合模型(GLMM)变量选择
  19. 父---->曾孙,跨多层组件传值方法provide/inject
  20. 萤石android demmo错误,Deemo - 叩击心灵的旋律 - Android 应用 - 【最美应用】

热门文章

  1. html5及CSS的学习2
  2. Unity3D RPG角色扮演游戏源码(上下)-----源代码分析----01-----主角人物动画
  3. Vue2基础篇-21-非单文件组件
  4. Altium Designer之PCB库部分名称区分
  5. VS2015安装完成后Visual C++的一些模板找不到,安装C++新模板
  6. 20189217 2018-2019-2 《密码与安全新技术专题》第1周作业
  7. CentOS之——Bringing up interface eth0: Determining if ip address 192.168.1.81 is already in use for de
  8. 031永久储存:腌制一缸美味的泡菜
  9. 解决this application failed to start
  10. Unity的Package了解(2020.3)