zoukankan      html  css  js  c++  java
  • 搜索服务之离线处理思路

    为完善展示搜索服务离线处理思路,现在编写三个简单的文档以作示范

    1.html->中华人民共和国
    2.html->中华人民共和国湖南省
    3.html->中华人民共和国湖南省株洲市
     
    现对1.html  2.html  3.html搜索,思路如下
     
    一、网页信息的提取与存储
    通过抓取1.html  2.html  3.html三个网页内容,用正则提取内容,形成格式化内容
    文件格式:url_content
    如:(test.txt)
    1.html_中华人民共和国
    2.html_中华人民共和国湖南省
    3.html_中华人民共和国湖南省株洲市
     
    二、清理数据,为建立倒排文件准备
    Map(key,value)->{key:url value:content}  如:key->1.html  value->中华人民共和国
    Partition(key,value)->{将相同的key汇集至同一个Reduce}
    Reduce(key,List<value>)->{如果一个key有多个value,说明有重复抓取,只取一个即可}
    最成形最终源文件oktest.txt
    文件格式:url_content
    1.html_中华人民共和国
    2.html_中华人民共和国湖南省
    3.html_中华人民共和国湖南省株洲市
     
    三、建立倒排文件
    1.分词
    Map(key,value)->{key:url value:content}  如:key->1.html  value->中华人民共和国
    对Content分词,计算出RANK,根据索引词集合向Reduct发射K次
    设:value分词所有的索引词集合为A{中华,人民,共和国}
    foreach(var a in A)
    {
         Map(key,value)->{key:a  value:url} 如:(key->中华 value:1.html)   (key->人民 value->1.html)  (key->共和国 value:1.html)
    }
    Partition(key,value)->{将相同的key汇集至同一个Reduce,key->索引词 value->url}
    Reduce(key,List<value>)->{如果一个key有多个value,说明这个索引词出现在多个文档里}
     最成形最终源文件okorder.txt
    文件格式:索引词_url   (实际会有更多的信息如RANK)
    中华_1.html_2.html_3.html
    人民_1.html_2.html_3.html
    共和国_1.html_2.html_3.html
    湖南省_2.html_3.html
    湖南_2.html_3.html
    株洲_3.html
    株洲市_3.html
     
    四、建立二级索引
     由于倒排文件过大,为提升查询速率,可以建立二级索引,具体如下
    <1.将倒排文件按约定(如取余)拆分成几个文件
    Partition(key,value)->{key:索引词 value:line(倒排文件记录)}
    {
      key=key%num
      return <key,value>
    }
    Reduce(key,value)->{key:索引词 value:line(倒排文件记录)}----相同取余分在一个子文件里
    如:
    okorder1.txt
    中华_1.html_2.html_3.html
    人民_1.html_2.html_3.html
    共和国_1.html_2.html_3.html
    okorder2.txt
    湖南省_2.html_3.html
    湖南_2.html_3.html
    okorder3.txt
    株洲_3.html
    株洲市_3.html
     
    根据映射关系形成最终的二级索引文件okindex.txt
    格式:索引词_文件号
    中华_okorder1.txt
    人民_okorder1.txt
    共和国_okorder1.txt
    湖南省_okorder2.txt
    湖南_okorder2.txt
    株洲_okrder3.txt
    株洲市_okorder3.txt
     
    五、搜索过程
    若搜索"中华人民"->拆分"中华","人民"索引词->查找二级索引文件(得出okorder1.txt)->搜索okorder1.txt(得出:
    中华_1.html_2.html_3.html
    人民_1.html_2.html_3.html)->返回查询结果(1.html,2.html,3.html)
  • 相关阅读:
    Redis的安装和部署
    SaltStack应用grains和jinja模板-第四篇
    SaltStack部署配置Tomcat-第三篇
    python魔法方法、构造函数、序列与映射、迭代器、生成器
    python异常
    python类
    python之函数、参数、作用域、递归
    docker+openvswitch实现主机与容器的网络通信
    Docker网络和容器的通信
    docker命名空间、控制组及联合文件系统概念
  • 原文地址:https://www.cnblogs.com/bobsoft/p/3545375.html
Copyright © 2011-2022 走看看