码迷,mamicode.com
首页 > 其他好文 > 详细

10分钟理解全文检索

时间:2015-09-07 00:31:00      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:

学习全文检索后的一些记录。

1:全文检索要解决的问题

我们遇到的数据总体分为两种:结构化数据非结构化数据

  • 结构化数据:指具有固定格式或有限长度的数据,如数据库,元数据等。
  • 非结构化数据:指不定长或无固定格式的数据,如邮件,word文档等。

对结构化的数据,我们可以用数据库等方式进行检索(效率差)。对于非结构化数据进行检索,利用windows系统的搜索也可以搜索文件内容,Linux下的grep命令等命令来实现。然而,使用这种顺序扫描的方式是相当费时的,于是便有了全文检索系统。

2:全文检索原理

    将非结构化数据转为结构化数据(索引的过程),然后从索引中查找。

3:索引里究竟存什么,为什么检索这么快?

    假如有3亿条产品标题存在数据库中,需要通过全文检索系统根据关键词来查找出相关的信息。

    例如前5条产品标题分别是:

    1:破碎机,挖掘机价格,破碎机图片,破碎机行业介绍

    2:破碎机销售,价格、磨石机价格、磨刀机价格

    3:电视机价格

    4:冰箱价格

    5:风扇价格  

索引过程:遍历每条产品标题,分词,创建倒排链表。

    第一条数据分词: 破碎 机 挖掘 机 价格 破碎 机 图片 破碎 机 行业 介绍

    统计出现次数: 

                破碎 3

                机  4

                挖掘 1

                价格 1

                图片 1

                行业 1

                介绍 1

    第二条数据分词:    破碎 机 销售 价格 磨石 机 价格 磨刀 机 价格

    统计每个词出现次数:

                    破碎 1

                    机  3

                    销售 1

                    价格 3

                    磨石 1

                    磨刀 1

    遍历所有的数据,生成倒排链表格式如下:

       破碎: 1=》  2 =>  3  => N   (数字代表文档编号)

       机 :  1 =》 2 =>  4

       价格: 1 =》 2

       挖掘: 1 =>  4 =>  5 =》 N

       图片: 1 => N

       行业: 1 => N

       介绍: 1 => 8 => 10 =》 N-1

       销售: 2 => N

       磨石: 2 => N

       磨刀: 2 => N

    此时倒排表已经建立好。文档多的时候,倒排链表会特别大,不过不用担心,倒排表是格式化后存硬盘的。

检索过程:

    输入关键词”破碎机价格”,全文检索系统首先对传入的字符串分词为"破碎 机 价格",然后取出这3个词对应的倒排表。这时候cpu该上场,cpu会计算出哪些文档同时出现在3个倒排表中。计算之后会得到包含“破碎 机 价格”的所有文档编号(1和2),最后根据这些编号从数据库中查出对应的详细信息并展示给用户。

4:检索结果排序

    如上例,搜索“破碎机价格”,文档1和文档2都会出现,那么哪条数据排前面是需要经过一个评分过程。

   1:对每个匹配到的文档计算权重(根据搜索的关键词”破碎 机 价格“来计算),使用如下公式:

技术分享

  • Term Frequency (tf):词频,在此文档中出现了多少次。
  • Document Frequency (df):文档频次,表示总共有多少文档包含此词。

公式最直白解释:df 越大说明越不重要,tf 越大说明越重要。

依照此公式依次对上一步得到的所有文档计算权重,最后求和(复杂的算法,这里是简化的说法),得到这个文档的得分。最终按照得分来排序。
上例中:“破碎” 在2个文档中出现,文档频次(df)就是2
             “机” 在3个文档中出现,文档频次是3
            “价格” 在5个文档中出现,文档频次是5
此时,得出“破碎”的文档频次(df)最小,”破碎“这个词最重要。再查“破碎“在文档1中出现3次(tf),在文档2中出现1次。此时文档1已经得到一个较大的评分。依次算出所有文档的得分。
继续对“机“、”价格“在所有文档上求出评分,最终会得出文档1评分最高。全文检索系统评分之后,会将文档1排在首位,文档2排在第2位。

5:词组匹配的实现(完全匹配)
待续
6: 属性过滤的实现
待续

 

10分钟理解全文检索

标签:

原文地址:http://www.cnblogs.com/dormscript/p/4787641.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!