热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

全文搜索原理简单解析

文前声明:本人只是知识的搬运工,文中许多知识和观点大多数都是来自于网络或书本,因为没有记录的习惯学习研究完,便忘记名称了,如若还记得,在文后自会添加备注。注:
    文前声明:本人只是知识的搬运工,文中许多知识和观点大多数都是来自于网络或书本,因为没有记录的习惯学习研究完,便忘记名称了,如若还记得,在文后自会添加备注。
 
    注:这是本人的第一篇薄文,水平相形见拙,有错误之处,欢迎指正。
 
    今年的计划是存储领域,希望能深入的了解其原理,如果能有创造性的写出一个自己的文件系统出来就更好了,到目前为止尚无动工的迹象,估计会顺延至明年了吧!
    我的计划正好赶上公司的总规划,于是便接了“大数据”的活。刚开始进入这一行,走了不少弯路,说多了都是泪(这不是本文的主题,就此打住,后面再叙),就在被Hive,Hbase,Hadoop,Spark等等各种工具搞的眼花缭乱的某个瞬间,头脑中冒出一个问题:如果不让用传统的关系数据库,要你自己去实现大数据存贮的话,第一件事要做的是什么? 搜索,全文搜索。数据存好存,关键是怎么找到你想要找到的数据,于是便花了一天时间研究了全文搜索技术(我想搞大数据的都该懂搜索才对的吧),谷歌、百度还有其他各种所搜都是采用的”全文搜索“,但技术实现各有优劣。
    那什么叫“全文搜索“,它的定义是什么? 说白了就是在一堆非结构化的文档中寻找你想要的数据的技术。
     全文搜索的实现技术各种各样,最原始的就是顺序查找。顺序查找顾名思义就是一个文档一个文档,一个字符一个字符查找,这种搜索技术简单,但时间复杂度为O(n)。人们发现为什么关系数据库的搜索就非常快,因为关系数据库添加了索引。全文搜索是不是可以参考一下它的实现呢,是的,当然可以,于是便诞生了现代的全新的”全文搜索技术“。这种技术类似于我们查新华字典的过程,现代新华字典增加了两种索引技术,一种是汉语拼音索引,一种是偏旁部首索引,可根据你的喜好自行选择其中一种索引技术去查找汉字。
    至此,我们引出了一个新的问题:即如何为一份文档创建索引?这是一个好问题,要讲的内容真不少,它牵涉到分词技术,因篇幅所限,所有问题的答案都从简,直白说,为一份文档创建索引就是提取关键字的过程。举个例子:”周杰伦很有才。他唱歌很好,就是口齿不清,这是一个遗憾!“,在这两句话中,我们提取出来的关键字应该是”周杰伦、有才、唱歌好、口齿不清、遗憾“,剩下的部分在分词技术领域被称为”停用词“(英文名称叫stop words),提取出来的关键字叫tokens。这种提取关键字的技术与我们初中语文课上学习的“提取句子主干即只保留主谓宾”内容相似,细节上区分还是蛮大的。
    我们创建起来的索引,大致如下图所示:
 
    这种为文档创建起来的索引,在学术上称为“倒排索引“,好,索引创建好了,那如何搜索呢?
这一步工作比创建索引要简单些(其实并不简单),我们输入关键字,程序根据关键字返回对应的文档,看起来到这一步貌似很合理,这就结束了?事实上没有这么简单,想想百度的时候,搜索的答案是随机的吗?显然不是(当然百度竞价排名是可恶的),搜索到的答案是根据一定的规则来返回。这个规则学术上称之为“评分”,评分高在前还是低在前要看评分规则了。
开源的搜索引擎"Lucene",评分规则就是低分在前,关于评分的规则也不展开说了,后面有机会再聊。
最后总结一下整个过程吧:
1:获取文档
2:进行分词,创建索引
3:索引存贮,以备后用
4:用户输入查找
5:分析用户输入,还是分词
6:搜索索引,返回相关文档
7:对返回的文档进行评分,进行排序
8:返回搜索到的文档
 
这里面每一步足以一篇论文来论述,后面有机会去实践这个玩意的时候,再详细叙述吧!
 
 
 
 
 
 
 
 

推荐阅读
  • HBase在金融大数据迁移中的应用与挑战
    随着最后一台设备的下线,标志着超过10PB的HBase数据迁移项目顺利完成。目前,新的集群已在新机房稳定运行超过两个月,监控数据显示,新集群的查询响应时间显著降低,系统稳定性大幅提升。此外,数据消费的波动也变得更加平滑,整体性能得到了显著优化。 ... [详细]
  • 深入浅出:Hadoop架构详解
    Hadoop作为大数据处理的核心技术,包含了一系列组件如HDFS(分布式文件系统)、YARN(资源管理框架)和MapReduce(并行计算模型)。本文将通过实例解析Hadoop的工作原理及其优势。 ... [详细]
  • 本文介绍如何通过整合SparkSQL与Hive来构建高效的用户画像环境,提高数据处理速度和查询效率。 ... [详细]
  • 大数据领域的职业路径与角色解析
    本文将深入探讨大数据领域的各种职业和工作角色,帮助读者全面了解大数据行业的需求、市场趋势,以及从入门到高级专业人士的职业发展路径。文章还将详细介绍不同公司对大数据人才的需求,并解析各岗位的具体职责、所需技能和经验。 ... [详细]
  • NoSQL数据库,即非关系型数据库,有时也被称作Not Only SQL,是一种区别于传统关系型数据库的管理系统。这类数据库设计用于处理大规模、高并发的数据存储与查询需求,特别适用于需要快速读写大量非结构化或半结构化数据的应用场景。NoSQL数据库通过牺牲部分一致性来换取更高的可扩展性和性能,支持分布式部署,能够有效应对互联网时代的海量数据挑战。 ... [详细]
  • Phoenix 使用体验分享与深度解析
    闲来无事看了下hbase方面的东西,发现还好理解不过不大习惯于是找到个phoenix感觉不错性能指标如下好像还不错了准备工作:启动hadoop集群启动zookkeeper启动hba ... [详细]
  • 本文介绍了多种Eclipse插件,包括XML Schema Infoset Model (XSD)、Graphical Editing Framework (GEF)、Eclipse Modeling Framework (EMF)等,涵盖了从Web开发到图形界面编辑的多个方面。 ... [详细]
  • 本文详细介绍了如何处理Oracle数据库中的ORA-00227错误,即控制文件中检测到损坏块的问题,并提供了具体的解决方案。 ... [详细]
  • 本文探讨了在SharePoint环境中使用BDC(Business Data Catalog)时遇到的问题及其解决策略,包括XML文件导入SSP后的不可见性问题以及与远程SQL Server 2005连接的难题。 ... [详细]
  • 面对众多的数据分析工具,如何选择最适合自己的那一个?对于初学者而言,了解并掌握几种核心工具是快速入门的关键。本文将从数据处理的不同阶段出发,推荐三种广泛使用的数据分析工具。 ... [详细]
  • 本文介绍了如何使用Hive分析用户最长连续登录天数的方法。首先对数据进行排序,然后计算相邻日期之间的差值,接着按用户ID分组并累加连续登录天数,最后求出每个用户的最大连续登录天数。此外,还探讨了该方法在其他领域的应用,如股票市场中最大连续涨停天数的分析。 ... [详细]
  • Storm集成Kakfa
    一、整合说明Storm官方对Kafka的整合分为两个版本,官方说明文档分别如下:StormKafkaIntegratio ... [详细]
  • 小记hbase数据库java API 常用方法及案例
    HBaseAdmin类:管理hbase数据库的表信息,‘创建表、删除表、列出表选项、使表有效/无效、添加或删除列簇’;  ... [详细]
  • Hadoop——实验七:MapReduce编程实践
    文章目录一.实验目的二.实验内容三.实验步骤及结果分析 1.基于ubuntukylin14.04(7)版本,安装hadoop-eclipse-kepler-plugi ... [详细]
  • Hadoop的分布式架构改进与应用
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
author-avatar
爱在西元前2502938591
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有