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

转载于:https://www.cnblogs.com/sunsc/p/5631124.html

全文搜索原理简单解析相关推荐

  1. 邻近算法(KNN)原理简单解析

    邻近算法(KNN)原理简单解析 一.什么是邻近算法 1.1简介 1.2核心思想 1.3 算法流程 1.4 优缺点 二.实例演示KNN算法 一.什么是邻近算法 1.1简介 邻近算法,或者说K最近邻(KN ...

  2. 锐速与BBR的原理简单解析

    锐速与BBR的原理简单解析  4 前言 昨天,有一位朋友在我的文章下留言说,锐速和BBR不都是一样,是拥塞算法嘛.因为这方面需要讲的东西比较多,所以我还是专门水一篇文章吧. 锐速 参考资料: http ...

  3. Word2Vec原理简单解析

    前言 词的向量化就是将自然语言中的词语映射成是一个实数向量,用于对自然语言建模,比如进行情感分析.语义分析等自然语言处理任务.下面介绍比较主流的两种词语向量化的方式: 第一种即One-Hot编码 是一 ...

  4. 存储过程原理简单解析

    1.什么是存储过程? 将一组预先编译好的SQL语句的集合,存放在一个特定的文件中.类似于JAVA中的方法. 2.存储过程的工作原理 将存储过程预先编译好的SQL语句集合称为集合A,里面包含SQL1.S ...

  5. Lucene全文搜索原理与使用

    http://blog.csdn.net/yangqian201175/article/details/51462413

  6. 纯MongoDB实现中文全文搜索

    广州天勤数据有限公司 赖勇浩 摘要 MongoDB在2.4版中引入全文索引后几经迭代更新已经比较完美地支持以空格分隔的西语,但一直不支持中日韩等语言,社区版用户不得不通过挂接ElasticSearch ...

  7. 纯 MongoDB 实现中文全文搜索

    本文来自获得<2021MongoDB技术实践与应用案例征集活动>一等奖作品 摘要 MongoDB在2.4版中引入全文索引后几经迭代更新已经比较完美地支持以空格分隔的西语,但一直不支持中日韩 ...

  8. 【Elasticsearch】全文搜索

    全文搜索是ES的关键特性之一,平时我们使用SQL的like语句,搜索一些文本.字符串是否包含指定的关键词,但是如果两篇文章,都包含我们的关键词,具体那篇文章内容的相关度更高? 这个SQL的like语句 ...

  9. Elasticsearch(三)——Es搜索(简单使用、全文查询、复合查询)、地理位置查询、特殊查询、聚合操作、桶聚合、管道聚合

    Elasticsearch(三)--Es搜索(简单使用.全文查询.复合查询).地理位置查询.特殊查询.聚合操作.桶聚合.管道聚合 一.Es搜索 这里的 Es 数据博主自己上网找的,为了练习 Es 搜索 ...

最新文章

  1. 代码恒久远,GitHub 永流传
  2. optee对std smc的处理的详解
  3. leetcode557. 反转字符串中的单词 III python,处理字符串的神!
  4. jfinal poi
  5. oracle job定时报错,Oracle Job定时任务的使用详解
  6. 嫁人要嫁IT男 ,嫁对了人天天都是情人节
  7. 缺少Python27_d.lib的解决方法
  8. kafka消费者脚本无法启动问题
  9. 物联网测试正面临四大难关
  10. Xcode 7.3 解决自定义类无法自动联想
  11. 如何关闭正在运行的端口
  12. 异数OS-织梦师-异数OS虚拟容器交换机(七) 走进4Tbps网络应用时代,加速5G应用真正落地
  13. 什么是云计算,云计算运营方式和部署方式介绍
  14. SSH实战 第四天 代码
  15. 阴阳师1月服务器维护,《阴阳师》手游1月24日维护更新公告:新区「暖风春穗」集结开启!...
  16. 幻云蜜网筑迷阵 春秋靶场信安大赛从攻击者角度看安全
  17. 成为认知高手,要避免这9个认知思维陷阱!
  18. [云原生专题-22]:K8S - 集群编排工具K8S与SWARM比较与技术选择
  19. MySQL单表查询总结
  20. python2.7安装教程windowsxp_怎么在windows xp 下安装python 2.7

热门文章

  1. ShaderJoy —— Film Burn (炫光光晕)效果【GLSL】
  2. 触摸屏驱动分析(eeti源码为例)
  3. SLAM技术目前主要应用在哪些领域
  4. 万国觉醒迁服务器显示该王国还未开放,万国觉醒无法迁城怎么办 王国迁城条件及详细步骤...
  5. 用鼠标左右拖拽 html,js实现鼠标拖拽div左右滑动
  6. crc16的c语言函数 计算ccitt_计算CRC16校验和的函数
  7. js轮播图案例(个人总结向-参考黑马pink老师教程
  8. 小航助学编程在线模拟试卷系统(含题库答题软件账号)
  9. springboot项目层次结构_spring boot项目结构
  10. Java 结合实例学会使用 静态代理、JDK动态代理、CGLIB动态代理