Twitter新搜索架构将采用开源Lucene

2010年10月11日 admin 评论已被关闭

除了重新设计了UI,在后端,Twitter也带来了非常巨大的变化。今天,Michael Busch 更新了Twitter Engineering Blog, 给我们带来了一些搜索方面改进的细节。

刚开始Twitter的实时搜索引擎是基于Summize技术,Summize是Twitter 于 2008 年收购的一家公司。但是从那以后,Twitter开始显著成长:每秒 1000 条推和 12000 个查询,一天下来要 10 亿查询,从那里起,Twitter 的工程师团队就开始寻找一个替代品了,因为旧式的基于MySQL的系统已经面临了巨大的挑战。

所以Twitter开始转向一个新的搜索架构,选择了开源的Lucene。

先不说Lucene的优势,首先它在实时搜索方面就有一些缺点,所以 Twitter 重写了它的部分架构,但是仍然支持 Lucene 的API。重写的部分包括:

* 改进无用数据收集的性能

* 无锁数据结构和算法

* 逆序遍历 posting 列表

* 有效的早期查询终止

Twitter的目标是,信息发布10秒内即可被搜索服务索引。Twitter称,该公司目前只利用了新搜索服务后台约5%的资源,每秒能够索引的Twitter消息数量可以达到当前的50倍。使工程师们”至少支持更大负载“的使命向前迈进了一步。

值得注意的是,就在一个月前,Google曾发布了Instant即时搜索功能,并向美国用户正式推出,当用户在谷歌搜索框中输入“W”时,谷歌便可以为其提供当地的天气预报。如果用户最终并未使用“weather”(天气),而是选择了其他关键词,搜索结果页面也会即时刷新,并进行相应的改变。

在Google的Instant即时搜索引擎中,部署了新的缓存系统,用以处理高速度的查询要求,同时连续性地抓取网络内容,并为这些内容重新建立索引。

对于即时搜索技术的未来,我们很难判定谁能代表未来,但不可否认的是,在面向社会化网络时,以Twitter的Lucene架构和Google的Instant技术将是代表未来搜索引擎的重要技术方向。

分类: PHP 标签:

SEO与HTML

2010年9月29日 admin 评论已被关闭
1、<!--页面注解-->
2、<html>
3、<head>
4、<title>页面标题</title>
5、<meta http-equiv=Content-Language content=zh-cn>
6、</meta><meta http-equiv="Content-Type" content="text/html; charset=gb2312">
7、</meta><meta name="keywords" content="关键词">
8、</meta><meta name="description" content="网站描述">
9、<link href="inc/css.css" type="text/css" rel="stylesheet">
10、</link></meta></head>
11、<body>
12、<div>
13、<h1>页面内容标题</h1>
14、<h2>页面相关性标题</h2>
15、<h3>标题系列</h3>
16、<h4>标题系列</h4>
17、<h5>标题系列</h5>
18、<h6>标题系列</h6>
19、<img src="xxx.jpg" alt="图片说明"/>
20、<a href="/" title="链接说明">链接词</a>
21、<strong>重点关键词强调</strong>
22、<b>关键词强调</b><u>关键词强调</u><i>关键词强调</i>
23、</div>
25、<div>
26、版权部分关键词强调
27、</div>
28、</body>
29、</html>

********************************************************

注:在..标签区中的罗列,都是一些基础的HTML标签,这些标签出现的次序是可以变化的。

下面来给大家详细解答一下。
阅读全文…

分类: PHP 标签: ,

密码保护:近期要完成的工作

2010年9月29日 admin 评论已被关闭

这是一篇受密码保护的文章。您需要提供访问密码:


分类: 随便写写 标签:

CSS隐藏文字

2010年9月9日 admin 2 条评论

(1)
text-indent:-9999px;
定义
text-indent 属性规定文本块中首行文本的缩进。
注释:允许使用负值。如果使用负值,那么首行会被缩进到左边。
注意:在 CSS 2.1 之前,text-indent 总是继承计算值,而不是声明值。
使用text-indent:-9999px; 可以偏移掉文本,但是这个属性只支持block块级元素,而我们想要偏移掉a上的文字时就不行了,当然,你也可以
a{display:block} 但是 a 后的元素就被换成下一行了,更当然,也可以继续转换,但是就有些’冗余’了。
(2)
line-height:0;
font-size:0;
overflow:hidden;
能够很好的隐藏掉文字。
(3)
display:none;
当然,这要给文字加个额外的标签了。

分类: WEB标准 标签: ,

ThinkPHP 使用U方法支持分组

2010年8月28日 admin 评论已被关闭

thinkphp 使用U方法支持分组

U方法可以用来动态的生成需要的URL地址,如果使用了分组模式,我们仍然可以使用U方法。
U(‘/Admin-User/add’);
生成的URL表示Admin分组的User模块的add操作,注意 Admin-User 之间的“-” 是固定的
同样的道理,我们在Action类的redirect方法中也可以这样使用
$this->redirect(‘/Admin-User/add’);

分类: PHP 标签: , ,

ThinkPHP 设置默认时区

2010年8月27日 admin 评论已被关闭

Thinkphp 设置默认时区

有些应用所在的服务器和访问的区域间隔较大,导致服务器时间不准确,我们可以通过设置默认时区的方法来处理。

我们只需要在项目配置文件中添加:
‘DEFAULT_TIMEZONE’=>’Asia/Singapore’ // 设置默认时区为新加坡

分类: PHP 标签: , , ,

PHP数组函数in_array与array_diff

2010年7月27日 admin 2 条评论

in_array — 检查数组中是否存在某个值
例子:

1
2
3
4
5
6
7
8
9
<?php
$os = array("Mac", "NT", "Irix", "Linux");
if (in_array("Irix", $os)) {
    echo "Got Irix";
}
if (in_array("mac", $os)) {
    echo "Got mac";
}
?>

array_diff() 返回一个数组,该数组包括了所有在 array1 中但是不在任何其它参数数组中的值。注意键名保留不变。
例子:

1
2
3
4
5
6
7
<?php
$array1 = array("a" => "green", "red", "blue", "red");
$array2 = array("b" => "green", "yellow", "red");
$result = array_diff($array1, $array2);
 
print_r($result);
?>

用处
判断变量是否在数组中( in_array )
对不在其一数组中的键值进行操作:
例:

1
2
3
4
5
6
7
8
$subArr=array('0'=>'isTitle','1'=>'isUrl','2'=>'isIntro','3'=>'isAuthor','4'=>'isPub_Date','5'=>'isPub_Time', );
$notSelect = array_diff($subArr,$data); //取数组交集,判断没有选中的对象
foreach($notSelect AS $key=>$val)
    {
      $queryNo[]=$val.'=0';
	}
$queryNo=implode(',',$queryNo);
$queryNo= " UPDATE ......   ";
分类: PHP 标签: , , ,

[转]PHP程序61条面向对象分析设计的经验原则

2010年7月14日 admin 1 条评论

你不必严格遵守这些原则,违背它们也不会被处以宗教刑罚。但你应当把这些原则看成警铃,若违背了其中的一条,那么警铃就会响起 。 —– Arthur J.Riel

  (1)所有数据都应该隐藏在所在的类的内部。

  (2)类的使用者必须依赖类的共有接口,但类不能依赖它的使用者。

  (3)尽量减少类的协议中的消息。

  (4)实现所有类都理解的最基本公有接口[例如,拷贝操作(深拷贝和浅拷贝)、相等性判断、正确输出内容、从ASCII描述解析等等]。

  (5)不要把实现细节(例如放置共用代码的私有函数)放到类的公有接口中。

  如果类的两个方法有一段公共代码,那么就可以创建一个防止这些公共代码的私有函数。

  (6)不要以用户无法使用或不感兴趣的东西扰乱类的公有接口。

  (7)类之间应该零耦合,或者只有导出耦合关系。也即,一个类要么同另一个类毫无关系,要么只使用另一个类的公有接口中的操作。

  (8)类应该只表示一个关键抽象。

  包中的所有类对于同一类性质的变化应该是共同封闭的。一个变化若对一个包影响,则将对包中的所有类产生影响,而对其他的包不造成任何影响 .

  (9)把相关的数据和行为集中放置。

  设计者应当留意那些通过get之类操作从别的对象中获取数据的对象。这种类型的行为暗示着这条经验原则被违反了。

  (10)把不相关的信息放在另一个类中(也即:互不沟通的行为)。

  朝着稳定的方向进行依赖.
阅读全文…

分类: PHP 标签: ,

Memcached在大型网站中应用

2010年7月11日 admin 评论已被关闭

原文链接:http://tomore.myoow.com/showlog351.html
===================================================
memcached是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。最初为了加速 LiveJournal 访问速度而开发的,后来被很多大型的网站采用。起初作者编写它可能是为了提高动态网页应用,为了减轻数据库检索的压力,来做的这个缓存系统。它的缓存是一种分布式的,也就是可以允许不同主机上的多个用户同时访问这个缓存系统, 这种方法不仅解决了共享内存只能是单机的弊端, 同时也解决了数据库检索的压力,最大的优点是提高了访问获取数据的速度!基于memcached作者对分布式cache的理解和解决方案。memcached完全可以用到其他地方 比如分布式数据库, 分布式计算等领域。
阅读全文…

分类: PHP 标签: ,

高效整洁CSS代码原则 [转]

2010年7月5日 admin 评论已被关闭

CSS学起来并不难,但在大型项目中,就变得难以管理,特别是不同的人在CSS书写风格上稍有不同,团队上就更加难以沟通,为此总结了一些如何实现高效整洁的CSS代码原则:
1. 使用Reset但并非全局Reset
  不同浏览器元素的默认属性有所不同,使用Reset可重置浏览器元素的一些默认属性,以达到浏览器的兼容。但需要注意的是,请不要使用全局Reset:
view sourceprint?*{ margin:0; padding:0; }

  这不仅仅因为它是缓慢和低效率的方法,而且还会导致一些不必要的元素也重置了外边距和内边距。在此建议参考YUI Reset和Eric Meyer的做法。我跟Eric Meyer的观点相同,Reset并不是一成不变的,具体还需要根据项目的不同需求做适当的修改,以达到浏览器的兼容和操作上的便利性。我使用的Reset如下:

阅读全文…

分类: WEB标准 标签: ,