`
carus
  • 浏览: 30303 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

[zz]打造自己的分布式搜索引擎底层架构(非Lucene)

 
阅读更多

打造自己的分布式搜索引擎底层架构(非Lucene)

大家知道,搜索引擎技术不仅仅是类似百度首页的应用,还可以衍生出数据分析工具,商务智能工具等许多有卖点的应用,甚至是社会化关系通道的发现。
甚至这些非搜索引擎的搜索引擎产品才是最重要的,因为你不需要去做百度做的事情。
所以,搜索引擎技术要了解原理,才可以扩展,离开Lucene也能做搜索引擎是非常重要的,利用这个积木,我们可以搭建房子和汽车。


搜索引擎要完成的目的,就是O(1)秒杀爬虫采集来的文章里关键字的搜索,丫的和数据库Like不同的效果优点是速度快,缺点是如果没建索引的字,搜不到。

本文是针对:打造一个自己的搜索引擎服务器的积木底层模块,给大家扩展思路和分析知识,同时为我下一步的工作打下基础。
但是这个基本思路我要保证是靠谱的,并且可以达到给大家分享数据结构知识的目的。

  
做自己的搜索引擎(非Lucene),需要两大几方面的知识:

一,简单够用的分布式;

二,基本的数据结构和算法,知道复杂度和数据结构的对应关系。

重点是二

所以本文会花时间讲解如何利用.Net自带的集合干这个事儿。

 

先快速把一部分带过:

1,文件+数据库服务器群,首先你要有大量的文章,爬虫采集来的或者你用啥办法搞来的,这些按T计算的文章一个机器放不下,也没必要放一起,因为硬盘并发性能比较差,你需要有一堆机器是存放这些文件的,处理文件的事儿,交给这些机器并发去处理,而不应该是

一个机器排队处理,如果用.NET来做WCF架构比较合适,WCF自己去搜索,本文不细谈。

2,Web服务器群,数据库要应付大量搜索请求,搜索引擎才有意义,所以Web负载均衡和反向代理是必要的,自己去搜反向代理,Nginx,Squid之类的词,本文不讲。

3,MemChached群,是分布式的哈希表,一个机器放不下我们期望的内存数量,自己去搜MemChached,本文不讲。

4,索引服务器群,就是定时或者一直在忙活简历索引的后台服务器,单独搞几台。

总之你需要4群服务器,每个群的数量看需要和你的钱数调整,没钱就都搞一个机器上,如果只是实验的话。

下面是本文的关键部分。
先说数据结构的原理:(数据结构和算法要解决的基本问题就是搜索和排序)

1,搜索:查找一个东西有还是没有,复杂度是O(1),哈希表,搜索引擎就是利用哈希表的这个特性,其他O(n)或O(logN)的搜索不适合干这个。
2,排序:如果大家都有,那么哪个文章词出现的频率就是决定显示的排序,排序,职业的做法是O(N*logN)时间空间都OK,如果你说只学过冒泡,那你拿鼠标拍自己的头吧,赶紧找本书看看为啥冒泡O(n^2)是业余的。
3,动态排序的概念是对于新插入的元素能以O(LogN)的复杂度到达自己应该站的位置,一般做法是二叉堆,在.Net里是SortedList<T,T>泛型容器,至于里边实现,不管他,反正满足我们需要的复杂度。

好,以上三个概念是我们解决一切问题的出发点,复杂度和数据结构的对应关系一定要形成大脑的条件反射,不需要你非要数据结构考试85分,但是这种意识是优秀程序员必备的。

分析搜索的过程:
0,高频字典:我们提前准备个高频字典,是哈希字典容器Dict<WordID(int),Word(string)>;这个可以放在集群MemCached里,也可以按照你的机器数量分段存放。

1,输入检验:用户输入一个词,先检验这个词在词典里要有编号,没编号的加进去,当然新放的不可能被搜到,建立索引后下次才能被搜到;

2, 哈希搜索:要达到O(1),我们必须知道这个词对应哪些文章。需要这样一个哈希字典容器Dict<WordID(int),SortedList<DocID(int),Freq(int)>>;这样能返回一堆排序好的文章。我们先假设按照词的频率去排序。

3,初始化分词:为了实现SortedList<T,T>,我们在第一次初始化分词,就是把文章里出现的二字,三字,四字长的等词汇,找出来,按照出现的频率进行排序,这个以文章为索引的也要建立。Dict<DocID(int),SortedList<WordID(int),Freq(int)>>
 http://topic.csdn.net/u/20070914/17/9A27E63A-CAD6-4955-8E14-61DC9357A8AD.html这里有我以前写的例子,本文不细说了。

4,分词作业:为了保证用户输入的都被索引,分词要形成作业,就是有个后台程序不断的维护这个搜索引擎的分词索引,还要及时把索引序列化到文件里,保存起来,以便下次开机后不需要再计算。

5,新加的文章需要进行3的步骤,新加的用户词汇,比如“给力”需要进行4的步骤。

其他辅助步骤
1,爬虫采集数据,文章的粒度,新闻要大文本存放,不论是数据库的Text字段还是纯文本,都要把HTML标签分解开来,如果对于微博,要分解到用户ID,文章ID,转发ID,粉丝ID等可以被计算的数值。
2,语义分析,如评论的正面还是负面,需要分拣数据,人工赋予智能。
3,文章重复或者相关性检测,利用关键字分布的频率,余弦算法(自己去搜索)来计算相似度。

分享到:
评论

相关推荐

    分布式搜索引擎的架构实践

    ### 分布式搜索引擎的架构实践 #### 一、概述 随着互联网的发展,电子商务平台面临着海量数据的挑战。特别是在像“11.11”这样的大型促销活动中,电商平台必须能够处理突发性的大规模流量。为了应对这一挑战,1...

    分布式搜索引擎Elasticsearch开发实战基础篇 (ElasticSearch、ELK、搜索引擎、Lucene).rar

    分享一套完整版视频课程——分布式搜索引擎Elasticsearch开发实战基础篇 (ElasticSearch、ELK、搜索引擎、Lucene),本教程旨在带领大家进入搜索引擎领域,从无到有,深入浅出的讲解了什么是搜索引擎,搜索引擎的...

    14_分布式搜索引擎的架构是怎么设计的?为啥是分布式的?.zip

    分布式搜索引擎的架构设计是现代大数据处理的关键技术之一,尤其在互联网时代,海量数据的存储与检索需求推动了这种架构的发展。本主题将深入探讨为何搜索引擎需要采用分布式设计,以及其核心组件和工作原理。 首先...

    Hadoop+HBase+Hive+lucene分布式搜索引擎分析系统

    分布式搜索引擎分析系统通常由多个组件组成,以处理和分析海量数据。在这个系统中,Hadoop、HBase、Hive和Lucene共同发挥作用,构建了一个高效、可扩展的解决方案。 Hadoop是Apache开源项目,主要由两个核心部分...

    高性能分布式搜索引擎Solr的研究与实现.pdf

    通过介绍Solr的特性和基于Solr的分布式搜索架构,文章为大数据时代下如何提升搜索引擎性能提供了新的思路和方法。文章的研究成果对于搜索引擎设计、大数据处理以及云计算领域具有重要的理论和实践意义。

    15_分布式搜索引擎写入和查询的工作流程是什么样的?.zip

    分布式搜索引擎在现代IT环境中起着至关重要的作用,尤其是在大数据处理和实时分析的场景下。以Elasticsearch(ES)为例,它是一个流行的开源全文搜索引擎,以其高效、可扩展和易于使用的特性深受开发者喜爱。本篇将...

    基于lucene和nutch的开源搜索引擎资料集合

    [硕士论文]_基于MapReduce的分布式智能搜索引擎框架研究.pdf [硕士论文]_基于Nutch的垂直搜索引擎的分析与实现.pdf 一个例子学懂搜索引擎(lucene).doc 中文搜索引擎技术揭密.doc 九大开源搜索引擎介绍.txt 基于Nutch...

    开发自己的搜索引擎 lucene + heritrix

    开发自己的搜索引擎是一项复杂且具有挑战性的任务,涉及信息检索、数据处理、网络爬虫等多个领域的知识。在这个过程中,Lucene 和 Heritrix 是两个非常关键的工具,它们分别在搜索引擎的构建中扮演着不同的角色。 ...

    13_体验一下面试官对于分布式搜索引擎的4个连环炮.zip

    1. **分布式架构**:分布式搜索引擎的核心在于其分布式的特性,它可以将搜索任务分解到多个节点上并行处理,以提高系统的处理能力和响应速度。这种架构通常包括数据分布式存储、负载均衡、故障恢复等关键技术。面试...

    人工智能-项目实践-搜索引擎-基于java开发的分布式搜索引擎

    例如,Apache Lucene或Solr是基于Java的全文搜索引擎框架,提供了构建搜索引擎所需的基础设施。 8. **云计算平台**:现代分布式搜索引擎往往部署在云平台上,如AWS、Azure或Google Cloud,利用弹性计算资源进行动态...

    分布式搜索引擎 ppt 说明资料

    分布式搜索引擎Elasticsearch基础知识点 1. 什么是Elasticsearch? Elasticsearch是一个开源的分布式搜索引擎,能够快速地从海量数据中找到需要的内容。它是elastic stack(ELK)的核心组件,负责存储、搜索、分析...

    开发自己的搜索引擎--Lucene+Heritrix.zip

    在这个项目中,我们将使用Apache Lucene和Heritrix这两个开源工具来开发我们自己的搜索引擎。Apache Lucene是一个强大的全文搜索引擎库,而Heritrix则是一个功能丰富的网页抓取器,用于收集互联网上的数据。接下来,...

    es分布式搜索引擎

    Elasticsearch(简称ES)是一款基于Lucene的开源、实时、分布式全文搜索引擎,它不仅提供了搜索功能,还能进行数据分析和可视化。本篇文章将深入探讨ES分布式搜索引擎的安装过程、工作原理以及其在实际应用中的优势...

    开发自己的搜索引擎--Lucene+Heritrix

    在开发自己的搜索引擎时,需要了解如何使用Lucene和Heritrix。Lucene主要用于构建搜索引擎的后端,对收集到的数据进行索引和搜索处理。而Heritrix则负责前段的网页数据抓取。两者结合,可以实现从网页抓取到搜索的...

    MapReduce在分布式搜索引擎中的应用.pdf

    这种架构使得搜索引擎能够扩展到更广泛的分布式环境,提高对大数据集的处理能力,为用户提供更快捷的搜索体验。 关键词MapReduce、Lucene、分布式搜索的提及,强调了在分布式搜索引擎应用中,MapReduce编程模式发挥...

    开发自己的搜索引擎---Lucene+Heritrix(第2版)

    开发自己的搜索引擎---Lucene+Heritrix(第2版)。超星导出来的,非常清晰。CSDN上传限制60MB,点击我的用户名查看part2。

    开发自己的搜索引擎《lucene2.0+heritrix》一书对应的源码资料

    Lucene是一个高性能、全文本搜索库,而Heritrix则是一个强大的网页抓取工具,它们共同构成了搜索引擎的基础架构。 **Lucene 2.0**: Lucene是Apache软件基金会的一个项目,提供了一个高效、可扩展的全文检索库。在...

    基于Hadoop平台的分布式搜索引擎.zip

    3. 建立索引:使用Lucene或Solr等开源搜索引擎库,通过MapReduce在分布式环境中构建倒排索引。倒排索引是搜索引擎的核心,它将每个词对应到包含该词的文档集合。 4. 查询处理:用户输入查询后,搜索引擎根据倒排...

    解密搜索引擎技术实战 LUCENE & JAVA(第3版)PDF

    《解密搜索引擎技术实战 LUCENE & JAVA(第3版)》是一本深入探讨搜索引擎技术的专业书籍,由罗刚撰写。这本书主要聚焦于LUCENE和JAVA这两种技术在搜索引擎开发中的应用,为读者揭示了搜索引擎背后的复杂机制和实现...

    分布式搜索引擎-学习笔记-3

    分布式搜索引擎是现代大数据时代的关键技术之一,用于处理海量数据的搜索和分析工作。在这个学习笔记中,我们将聚焦于 Elasticsearch(ES)这一流行的开源搜索引擎,它基于Lucene构建,且广泛应用于Java开发环境中。...

Global site tag (gtag.js) - Google Analytics