全文索引介绍
来源:互联网 发布:围巾推荐知乎 编辑:程序博客网 时间:2024/06/16 17:14
相信所有人都用过百度,谷歌等搜索引擎。在使用过程中,我们会发现“搜索”这个操作的神奇之处, 我搜索“IT博客”这个关键词,搜出来的结果会“IT”相关的,有“博客”相关的,有“IT博客”相关的,搜索引擎很智能的将我们我们搜索的词分解开,去查找所有相关的内容。
在某宝,某猫等电商网站的搜索功能中也有这种神奇的能力,而且搜索的速度异常的快。
如何快速的从海量的数据中快速的搜索出我们想要的相关数据,这就是“全文搜索”所要做的事。而sphinx就在这方面做得极为出色。
全文数据索引分类
- 顺序扫描:如要查找大量的文本中找出包含某个字符串的特定文本文件,需要一个一个文件去扫描。数据库的like查询顺序扫描
- 索引扫描:将非结构化的数据中的关键内容提取出来,形成结构化的数据集合,提取出来的这部分数据就叫做索引
全文索引过程
- 创建索引:从数据中提取信息创建为索引
- 搜索索引:根据用户的请求,搜索创建的索引,从而得到用户想要的查询结果
索引创建原理
假设我们想在有以下几条数据:
- A moment later, Cohen picked up the phone. ‘Hello?’
- She could see the open door of a departmental office. ‘Hello! Excuse me. This is the department of French, isn’t it?’
创建索引有以下几个步骤
- 将源文档传给分词组件(tokenizer)
- 分词组件将源文档分词为一个个单词
- 去除所有的标点符号
- 去除停词,如the,a,this等,这类词汇对搜索引擎来说没有意义
- 经过分词之后,得到一个结果集,称之为词元,也就是上面所有单词的集合
如上述源文档得到的词元是: moment
later
Cohen
picked
up
等。
然后将词元传给语言处理组件,将词元转换为最原始的状态,例如:
- 大写转换为小写
- 去除时态
- 去除单复数形式
最后把处理好的词传给索引组件(Indexer)进行索引操作
索引组件主要做这两件事:
- 利用得到的词创建一个key-value形式的字典,key是传过来的词元,value是对应的文档ID。(文档ID就是数据库的每一条记录的主键)
- 对字典按照字母顺序进行排序
经过以上的流程,就形成了一个索引表
索引搜索
- 获取用户输入的内容
- 词法,语法分析,语言处理,得到分词
- sphinx根据分词搜索索引,得到相应的文档ID
- 查出文档内容,并排序
0 0
- 全文索引原理介绍
- sqlite3全文索引介绍
- 全文索引介绍
- 14.1 全文索引的介绍
- 全文索引
- 全文索引
- 全文索引
- --------------------------------全文索引------------------------------
- 全文索引
- 全文索引
- 全文索引
- 全文索引
- 全文索引
- 全文索引
- 全文索引
- 全文索引
- 全文索引
- 全文索引
- Java 集合框架(1)
- 河南省第九届大学生程序设计竞赛(未完待续)
- java-使用 flying-saucer 通过 xhtml 生成 pdf 文档支持 css 和 图片
- 《JavaFX应用程序添加HTML内容》-支持HTML5特性
- ApacheHadoop版本演变
- 全文索引介绍
- SVM
- 利用Scrapy爬取所有知乎用户详细信息并存至MongoDB
- AngularJS快速入门1--引导篇
- Anaconda中(Python2和Python3)的切换
- Sphinx安装与使用
- Oracle AWR性能分析报告
- HDU 2709
- Codevs 1766 装果子