第八章:简单之美——布尔代数和搜索引擎的索引

  接下来的几章,我们将讨论搜索引擎的一些基础知识。要真正做好搜索引擎,不可能是一朝一夕的事情,没有捷径可走。做好搜索,最基本的要求是每天分析10-20个不好的搜索结果,累积一段时间才有感觉。但是往往很多工程师都做不到这一点。搜索殷勤的原理其实非常简单:自动下载尽可能多的网页;建立快速有效的索引;根据相关性对网页进行公平准确的排序。下面我们将一一介绍。

1.布尔代数

  布尔值的运算相当简单,应该是属于高中的知识了,这里就不再讲述了。我们主要来看下文献检索和布尔运算的关系。对于用户输入的关键词来说,搜索引擎要判断每篇文章是否有这个关键词,如果有,就相应地给这篇文献一个逻辑值——真(True或1)或者假(False或0)。比如我们要找计算机应用的文献,但不想找软件方面的东西。可以用这样的一个语句“计算机 AND应用 AND(NOT 软件)”来表示。

2.索引

  大部分使用搜索引擎的人都惊讶于它能在极短的时间内找到千万条搜索结果。显然,如果把所有网页文本都扫描一遍是不可能的,那么这里面一定使用了技巧,这个技巧就是构建索引。最简单的索引的结构是用一个很长的二进制数表示一个关键词是否出现在文章中。有多少文章,就有多少位,一位对应一篇文章。比如“计算机”对应的二进制数为01001000110...,表示第二,第五,第九,第十...文献包含了这个关键字。同样的,假定“应用”对应的二进制数是:00101001100....,那么查找“计算机应用”的文献时,只要把这两个二进制数进行布尔运算AND,结果为1对应的那篇文献就是满足要求的。

  由于互联网的网页数量是巨大的,网络中的词也非常多。因此,这个索引是巨大的。所以普遍的做法是根据网页的序号将索引分成很多份,分别存储在不同服务器中。每当节诶受一个查询时,这个查询就被分到许多服务器中,这些服务器并行处理用户请求,并把结果返回给主服务器合并处理,最后把结果返回给用户。

  而随着互联网上内容的增加,数据也越来越多,因此需要根据网页的重要性,质量和访问的频率建立常用和非常用等不同等级的索引。这就类似计算机中的页表和快表的差别。但是不论搜索引擎的索引在工程上如何复杂,原理上依然非常简单,即等价于布尔运算。

时间: 2024-08-24 18:47:08

第八章:简单之美——布尔代数和搜索引擎的索引的相关文章

[原创]linux简单之美(三)

原文链接:linux简单之美(三) 在linux简单之美(二)中我们尝试使用了C库的函数完成功能,那么能不能用syscall方式来搞呢?显然可以! 1 section .data 2 ft db "now is X",10 3 4 section .text 5 global _start 6 7 _start: 8 mov edi,10 9 again: 10 dec edi 11 mov eax,edi 12 add eax,0x30 13 mov byte [ft+7],al 1

[原创]linux简单之美(二)

原文链接:linux简单之美(二) 我们在前一章中看到了如何仅仅用syscall做一些简单的事,现在我们看能不能直接调用C标准库中的函数快速做一些"复杂"的事: 1 section .data 2 ft db "now is %d",10 3 4 section .text 5 extern puts 6 extern exit 7 extern sleep 8 extern printf 9 global main 10 11 main: 12 mov edi,1

[原创]linux简单之美(一)

原文链接:linux简单之美(一) 话说windows也有syscall,这是必须的.但是win的syscall可以直接call吗?可以是可以但是破费周折,搞成SDT之类的复杂概念.下面看看linux是如何做的吧. 1 section .data 2 msg db "hello hopy!",0x0a 3 4 section .text 5 global _start 6 7 _start: 8 mov eax,4 9 mov ebx,1 10 mov ecx,msg 11 mov e

《简单之美》读后感(part1)

<简单之美>一书,对于软件开发的过程,在很多地方值得我们深思. 作者讲述了软件开发中各种常见问题,从思想层面深刻剖析,最后还是归结到以人为本这一核心思想.以人为本不是一句空话,核心就是对思想和文化的关注,软件是给人用的,如果抓不住以人为本这一核心思想,那软件注定是失败的. 本书传递的思想是,用简单的原则.富于想象的精神.文化的视角来认识软件开发. 软件的美和价值在于创造,创造的根源在于想象.当然这必须基于对软件开发的深刻理解.重点在于需要形成一个自己的,系统而且完整的观念.

和我一起打造个简单搜索之Logstash实时同步建立索引

用过 Solr 的朋友都知道,Solr 可以直接在配置文件中配置数据库连接从而完成索引的同步创建,但是 ElasticSearch 本身并不具备这样的功能,那如何建立索引呢?方法其实很多,可以使用 Java API 的方式建立索引,也可以通过 Logstash 的插件 logstash-input-jdbc 完成,今天来探讨下如何使用 logstash-input-jdbc 完成全量同步以及增量同步. 环境 本文以及后续 es 系列文章都基于 5.5.3 这个版本的 elasticsearch

也试试简单的美肤美白(机器视觉)

一天两篇博文也是醉了. 这次也研究一个好玩的东西  关于美白美肤的 实现的目标:接近美图秀秀之类的软件的处理效果,具备有美白,磨皮之类的效果 于是可能有以下一些实现方式 1.直接将原图光滑磨皮,然后直接美白.可能过程如下 从左到右分别 是原图->磨皮效果->美白效果 那么这个过程就可以简单的分为 1.对原图进行磨皮,2对磨皮的效果图进行美白 那么磨皮要怎么做呢?我们磨皮是为了什么--去掉小印小坑之类的但是希望看来我们还是那样轮廓分明,该是眼睛还是眼睛的轮廓,总结起来就是去噪保边,去噪保边的理念

C++——简单数据类型及布尔类型

一. 简单数据类型 数据类型描述了对象在内存存储区中占据的空间大小,描述了对象能够表示的数据范围 和类型.C++语言中常用的数据类型有整型.实型.字符型(这3种类型也被称之为简单数 据类型).数组类型.布尔类型.枚举类型.结构体类型.公用体类型.指针类型.引用类 型等. 1.整形 整型按符号划分,可以分为有符号整型和无符号整型两大类,从长度划分,可以分为 普通整型.短整型和长整型3类. 2.实型 实型主要包括单精度型.双精度型和长双精度型. 10.010.0x10.10u.10L.10UL.10

React的设计哲学 - 简单之美

React最初来自Facebook内部的广告系统项目,项目实施过程中前端开发遇到了巨大挑战,代码变得越来越臃肿且混乱不堪,难以维护.于是痛定思痛,他们决定抛开很多所谓的“最佳实践”,重新思考前端界面的构建方式,于是就有了React. React带来了很多开创性的思路来构建前端界面,虽然选择React的最重要原因之一是性能,但是相关技术背后的设计思想更值得我们去思考.之前我也曾写过一篇React的入门文章,并提供了示例代码,大家可以结合参考. 上个月React发布了最新的0.13版,并提供了对ES

自建docker swarm体验简单之美

之前用的阿里云容器服务,但由于acsrouting的路由错乱问题,被逼上自建docker swarm的梁山.今天尝试自己搭建docker swarm,竟然轻松搞定,简单的超乎想象. 以下是实际搭建操作步骤: 1. 创建集群 # docker swarm init --advertise-addr 10.251.242.231 Swarm initialized: current node (m9dfl7r9wo1e9jxsp3oe5du3x) is now a manager. To add a