没有合适的资源?快使用搜索试试~ 我知道了~
结构化数据检索,如对数据库的搜索,用SQL语句,再如对元数据的搜索,如利用windows搜索对文件名,类型,修改时间进⾏行搜索等。
资源推荐
资源详情
资源评论
全检索
我们活中的数据总体分为两种:结构化数据和结构化数据。
•
结构化数据:指具有固定格式或有限长度的数据,如数据库,元数据
等。
•
结构化数据:指不定长或固定格式的数据,如邮件,word档等。
当然有的地还会提到第三种,半结构化数据,如XML,HTML等,当根据需
要可按结构化数据来处理,也可抽取出纯本按结构化数据来处理。
结构化数据又种叫法叫全数据。
按照数据的分类,搜索也分为两种:
•
对结构化数据的搜索:如对数据库的搜索,SQL语句。再如对元数据
的搜索,如利windows搜索对件名,类型,修改时间进搜索等。
•
对结构化数据的搜索:如利windows的搜索也可以搜索件内容,
Linux下的grep命令,再如Google和百度可以搜索量内容数据。
对结构化数据也即对全数据的搜索主要有两种法:
种是顺序扫描法(Serial Scanning):所谓顺序扫描,如要找内容包含某个
字符串的件,就是个档个档的看,对于每个档,从头看到尾,
如果此档包含此字符串,则此档为我们要找的件,接着看下个件,
直到扫描完所有的件。如利windows的搜索也可以搜索件内容,只是相
当的慢。如果你有个80G硬盘,如果想在上找到个内容包含某字符串的
件,不花他个时,怕是做不到。Linux下的grep命令也是这种式。
家可能觉得这种法较原始,但对于数据量的件,这种法还是最直
接,最便的。但是对于量的件,这种法就很慢了。
有可能会说,对结构化数据顺序扫描很慢,对结构化数据的搜索却相对较
快(由于结构化数据有定的结构可以采取定的搜索算法加快速度),那么
把我们的结构化数据想办法弄得有定结构不就了吗?
这种想法很天然,却构成了全检索的基本思路,也即将结构化数据中的
部分信息提取出来,重新组织,使其变得有定结构,然后对此有定结构的
数据进搜索,从达到搜索相对较快的的。
这部分从结构化数据中提取出的然后重新组织的信息,我们称之索引。
这种说法较抽象,举个例就很容易明,如字典,字典的拼表和部
检字表就相当于字典的索引,对每个字的解释是结构化的,如果字典没
有节表和部检字表,在茫茫辞海中找个字只能顺序扫描。然字的某些
信息可以提取出来进结构化处理,如读,就较结构化,分声母和韵
母,分别只有种可以列举,于是将读拿出来按定的顺序排列,每
项读都指向此字的详细解释的页数。我们搜索时按结构化的拼搜到读,
然后按其指向的页数,便可找到我们的结构化数据——也即对字的解释。
这种先建索引,再对索引进搜索的过程就叫全检索(Full-text Search)。
下这幅图描述了全检索的般过程。
!
"
!
全检索体分两个过程,索引创建(Indexing)和搜索索引(Search)。
•
索引创建:将现实世界中所有的结构化和结构化数据提取信息,创建
索引的过程。
•
搜索索引:就是得到户的查询请求,搜索创建的索引,然后返回结果
的过程。
于是全检索就存在三个重要问题:
1. 索引究竟存些什么?(Index)
2. 如何创建索引?(Indexing)
3. 如何对索引进搜索?(Search)
下我们顺序对每个个问题进研究。
、索引究竟存些什么
索引究竟需要存些什么呢?
先我们来看为什么顺序扫描的速度慢:
其实是由于我们想要搜索的信息和结构化数据中所存储的信息不致造成
的。
结构化数据中所存储的信息是每个件包含哪些字符串,也即已知件,欲
求字符串相对容易,也即是从件到字符串的映射。我们想搜索的信息是哪
些件包含此字符串,也即已知字符串,欲求件,也即从字符串到件的映
射。两者恰恰相反。于是如果索引总能够保存从字符串到件的映射,则会
提搜索速度。
由于从字符串到件的映射是件到字符串映射的反向过程,于是保存这种信
息的索引称为反向索引。
反向索引的所保存的信息般如下:
假设我的档集合有100篇档,为了便表,我们为档编号从1到
100,得到下的结构
"
!
左边保存的是系列字符串,称为词典。
每个字符串都指向包含此字符串的档(Document)链表,此档链表称为倒排
表(Posting List)。
有了索引,便使保存的信息和要搜索的信息致,可以加快搜索的速度。
如说,我们要寻找既包含字符串“lucene”又包含字符串“solr”的档,我们只
需要以下步:
1. 取出包含字符串“lucene”的档链表。
2. 取出包含字符串“solr”的档链表。
3. 通过合并链表,找出既包含“lucene”又包含“solr”的件。
"
!
看到这个地,有可能会说,全检索的确加快了搜索的速度,但是多了索
引的过程,两者加起来不定顺序扫描快多少。的确,加上索引的过程,全
检索不定顺序扫描快,尤其是在数据量的时候更是如此。对个很
量的数据创建索引也是个很慢的过程。
然两者还是有区别的,顺序扫描是每次都要扫描,创建索引的过程仅仅需
要次,以后便是劳永逸的了,每次搜索,创建索引的过程不必经过,仅仅
搜索创建好的索引就可以了。
这也是全搜索相对于顺序扫描的优势之:次索引,多次使。
!
三、如何创建索引
全检索的索引创建过程般有以下步:
第步:些要索引的原档(Document)。
为了便说明索引创建过程,这特意两个件为例:
件:Students should be allowed to go out with their friends, but not allowed to
drink beer.
件:My friend Jerry went to school to see his students but found them drunk
which is not allowed.
!
第步:将原档传给分次组件(Tokenizer)。
分词组件(Tokenizer)会做以下件事情(此过程称为Tokenize):
1. 将档分成个个单独的单词。
2. 去除标点符号。
3. 去除停词(Stop word)。
所谓停词(Stop word)就是种语中最普通的些单词,由于没有特别的意
义,因多数情况下不能成为搜索的关键词,因创建索引时,这种词会被
去掉减少索引的。
英语中挺词(Stop word)如:“the”,“a”,“this”等。
对于每种语的分词组件(Tokenizer),都有个停词(stop word)集合。
经过分词(Tokenizer)后得到的结果称为词元(Token)。
在我们的例中,便得到以下词元(Token):
“Students”,“allowed”,“go”,“their”,“friends”,“allowed”,“drink”,“beer”,
“My”,“friend”,“Jerry”,“went”,“school”,“see”,“his”,“students”,“found”
,“them”,“drunk”,“allowed”。
!
剩余15页未读,继续阅读
资源评论
cngxguilin
- 粉丝: 0
- 资源: 14
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功