Archive for the 'Xerdoc' Category

Lucene使用者沙龙

说来惭愧,这篇文章应该是在6月16号完成的,但是最近有很多事儿,实在没时间和精力来写这篇Blog,又不想草草写就,于是一推再推,拖到现在。
这次沙龙的发起者是我和车东,我们在网上有过几次交流,分别是在MSN和SocialBrain的IRC Channel里面。大家都算是Lucene的比较早的实践者,车东还曾经写过一篇Lucene的普及文章(Lucene:基于Java的全文检索引擎简介),在网上流传甚广。
Lucene是一个非常优秀的开源的全文搜索引擎,可以说是一套非常优秀的SDK(开发工具包),我们可以在它的上面开发出各种全文搜索的应用来。Lucene在国外有很高的知名度,现在已经是Apache的顶级项目,在国内,Lucene的应用也越来越多。于是,Lucene这样一个开发包、一种技术,把大家联系在了一起。
这是车东在WebLucene的邮件列表中给出的沙龙安排:

时间:2005年6月16日晚7点
地点:北京 海淀区 清华东门茶餐厅
参与人员:XERDOC开发团队:(米嘉、曹飞、刘力、孟岩),WebLucene项目参与者:(车东、田春峰、张放洪、卢亮),特邀嘉宾(文德)
内容:上半场,车东进行PPT演示,时间20分钟,主题涉及WEBLUCENE的一些初衷,和尚未实现的一些设想(分词,发现,分类……)以及Lucene的一个应用案例(包括搜房、博客中国、gRaSSland.cnblog.org、8fang.com);下半场,Xerdoc的孟岩和米嘉进行PPT演示,介绍XERDOC的企业搜索和桌面搜索,并介绍Xerdoc中使用的中文分词算法。

比较有趣的是,最先大家争执的是Lucene的发音。我们一直的发音是[lu:s],车东的发音为[lu’sen],田春峰的发音为[lusen],后来田春峰给出比较令人信服的解释,我也在网上查到确切的证据,不过要想马上改正也是一件比较困难的事儿了:P。

Loo-seen.
Danny Sofer wrote:
> …and where does the name come from?
It’s my wife’s middle name, and her maternal grandmother’s first name.
Doug
- Lucene Maillist

车东的演示主要专注在WebLucene方面,简要的介绍了Lucene的来龙去脉、基本功能以及在gRaSSland(我也是在这次沙龙上第一次知道了gRaSSland的来历,这个名字起的有趣)的一些实践。大家如果感兴趣,可以参考附录中的PPT。
孟岩的演示主要集中在Xerdoc DSearch的一些简要介绍和主要Feature,包括Xerdoc DSearch中的Tag、插件化结构、国际化支持等等。其中,插件化是一个重要的部分,你可以从这张图看到Xerdoc DSearch的整个架构。
米嘉的演示则专注在Xerdoc中Lucene的应用上,分别介绍了基于最长词匹配算法变形的分词系统和Xerdoc的文档管理框架-XDMF。
非常喜欢这种形式的聚会,没有什么功利目的,大家凭着自己的兴趣坐在一起,海阔天空、高谈阔论,在这样的讨论中,你真的能够得到很多有益的东西。套用Scoble评论FooCamp的一句话,“你发现那个演讲者用的是一个构造完全不同的大脑来工作,而那正是是我们遗弃的那部分思维。”。在国外,FooCamp每年都会引起很大的轰动,不知道什么时候在中国也能有这样的聚会,我想,那就期望更多有影响力、有责任心的组织、媒体、个人站出来吧(BTW:看看去年FooCamp的照片吧,Lucene的作者Doug Cutting也在其中哦)。
不知道这是不是Lucene在中国使用者的第一次聚会,立此存照。
附:
1)会议录音(比较大,分成4个文件,每个大概10M)
1(9.42M) - 车东的演示
2(18.31M)- Xerdoc的演示
3(4.65M)- 自由讨论
4(12.83M)- 自由讨论
2)PPT
《WebLucene项目的来龙去脉》-车东(30K)
《Xerdoc XDMF》-米嘉(2332K)
《Xerdoc DSearch》-孟岩(262K)
Popularity: 29%

Popularity: 29%

Xerdoc move to Dreamhost

经过2周的努力,Xerdoc.com终于从Name2host搬到了Dreamhost。其间过程不可谓不艰辛,既然已经结束,也就不想再说什么,只是希望所有的SP都有送佛送到西的胸怀。
这次搬家,变化最大的要数Xerdoc Togetherum,经过一番讨论,大家都认为我们实在没有必要再继续开发自己的Blog Software,所以,最后决定用WordPress来作为新的Blog发布软件。Xerdoc Togetherum正式下岗,多谢曹飞给我们提供的这个平台 :-)。
WordPress当然没有提供Togetherum的导入脚本:P,所以数据的导入又比较麻烦,不过还好,WordPress考虑到了这种情况,提供从RSS2.0Feed的导入脚本(import-rss.php)。当然,这个脚本比较简单,还需要按照自己的情况进行一下Hack。比如说,这个脚本不支持作者,因此,你需要将读出的作者标签(“dc:creator”)转换为WP中相应的作者ID($post_author)。
由于选择了使用Feedburner提供烧制服务,因此RSS的转向倒是根本无需关心,这就是Wrapper或者说是Proxy的好处(计算机领域内的很多问题都可以通过多一层的抽象和Wrapper来解决)。不过,这也不可避免的带来了中心化服务的风险,TypePad曾经提到可以用这种方法“穿墙”,要是如果也被“Big墙”阻止,不敢想象。BTW:试用了FeedSky,感觉差距还不小,需要努力哦。
Xerdoc Story没有变化,我也会尽快补全Xerdoc的故事 :-)。 (哦,对,Phil在进行MySql的中文导入时好像遇到了一些问题,曹飞,补充一下?)
这是Xerdoc Togetherum的最后一篇帖子,http://together.xerdoc.com已经被重定向到了http://xerdoc.com/blog。
对了,最近,Gnome也在搬家,呵呵。
Popularity: 22%

Popularity: 22%

Xerdoc网站静态化备忘

那天在看Xerdoc网站统计的时候突然发现,Google的机器人每次来了只索引了了几个页面,内容很少。突然想起,Google的机器人似乎不索引这些带有Get参数的URL,这就意味着这些URL、包括这些页面涉及的URL都不会被索引,这就导致了整个网站被索引的量很低。
这是因为普遍认为互联网上静态页面的价值大于动态页面-尤其是这些带有参数的动态页面,其它搜索引擎也大多如此。
因此,面向搜索引擎来设计网站的一个很重要的方式就是网站的页面静态化。静态化通常有两种方式:一种是通常CMS支持的,将内容真正以静态的方式发布,这种方式的典范是MovableType,它的面向搜索引擎的设计堪称经典;第二种方式是用“静态化的URL”(URL美化)来替换这些动态的URL,其实就是“骗骗”这个Google的小机器人,让他认为我们的URL是一个静态页面。
用URL美化来提高搜索引擎的友好度主要有两种方式:1)URL Rewriting;2)PATH_INFO,车东和John Coggeshall在这方面都有很好的文章。

Search Engine Friendly的URL设计 - 车东
Search Engine Friendly PHP Pages - John Coggeshall

URL Rewriting主要是利用Apache中的rewrite_module来实现URL的重写(IIS中也有相应的模块,具体见此)。简单的说,该Module就是一个采用正则表达式进行分析,替换的Filter,来实时的改变用户请求的URL。改写的规则可以定义在服务器范围内(httpd.conf)、目录范围内(.htaccess),因为一般的虚拟主机不允许我们修改httpd.conf,所以我们只能来修改每个目录内的.htaccess文件了。但是从效率上来说,httpd.conf内定义的规则只在Apache启动的时候进行加载,所以效率很高,而.htaccess中定义的规则,在每次URL访问的时候都要重新访问此文件,大大的降低了效率。
利用URL Rewriting进行静态化的效果非常好,比如,Xerdoc中的静态化就是这样:

home.html -> shell.php?pos=home

竹笋炒肉的《Apache的Mod_rewrite学习》详细的介绍了 rewrite_module工作的原理,如果您感兴趣,可以看看。
另一种进行URL美化的方式就是采用PATH_INFO。PATH_INFO是一CGI的标准,一般的虚拟主机都有支持(在没有PATH_INFO支持的情况下,可以试试这样得到PATH_INFO:
$PATH_INFO= substr($_SERVER[’REQUEST_URI’],strlen($_SERVER[’SCRIPT_NAME’]), strlen($_SERVER[’REQUEST_URI’]));
)。PATH_INFO的主要原理是:当Server访问的页面或者目录不存在的时候,会依次访问“/”前面的文件,直到找到能够访问的文件为止。Web Server同时会创建一个名位 $PATH_INFO的变量,来记录除此文件外的其它URL信息。比如:

shell.php/pos/home 这个URL,最后访问的实际文件是 shell.php,而PATH_INFO的值是 /pos/home

这样,在PHP脚本中,可以解析这个PATH_INFO的值,得到相应的参数。
周六正好有时间,于是用静态的URL重构一下网站,来提高搜索引擎的友好度。(最近还有一个想法是重新用XHTML标准重构一下网站,完全用CSS来定义风格,忙完这阵子和曹飞商量一下)。
Xerdoc的服务器架设在name2host.com上,服务很是一般。本来想当然的以为不会支持rewrite_module来进行改造,就开始尝试PATH_INFO来进行改造。
像前面介绍的那样,在代码中解析PATH_INFO,然后再利用解析后的参数进行查询。比如 shell.php/pos/home 这个URL,PATH_INFO的值为 /pos/home,然后可以得到每个参数。

list($dummy, $first, $last) = explode(’/', $PATH_INFO)

这里需要注意的是,第一个参数为空,所以我们用dummy来存。
过程很简单,不过出现了意料之外的问题-相对路径(Relative Path)的问题。
比如shell.php中的CSS和Image文件都存在同级的images文件夹中,而引用的图片也都采用诸如“<img src=”images/image.gif”>”这样的相对路径方式,但是通过“shell.php/pos/home”这样的URL来访问的话,图像的实际路径变成了 “shell.php/pos/images/image.gif”,显然是错误的。
想来想去,有几种解决方案:
1)采用绝对路径来引用图片,修改量比较大,而且这些绝对信息将会引起将来重构或者搬移的难度;
2)计算PATH_INFO中的路径层数,在图像引用路径前面加上N(路径层数)个“../”,从而找到正确路径;
3)设置 BASE HREF 为该文档的真正URL,具体见此;
4)统一入口,统一所有资源文件的位置。
车东提到可以参考wiki中的资源处理方式,等忙过这段,需要学习再来补充。:-)
这样看来,利用PATH_INFO来进行改造,需要修改的地方比较多,于是突然想起,何不试试Xerdoc的Server能否支持Apache的Rewrite Module。于是,在需要静态化的目录中加了一个简单的.htaccess文件,内容如下:

RewriteEngine On
RewriteRule (.+)\.html$ shell\.php?pos=$1 [L]

然后开始访问,结果遇到下面的错误:

Forbidden
[…]

Popularity: 38%

这个题目就是一个Tag,随便聊聊。
在我们设计Xerdoc DSearch的时候,就已经把Tag考虑了进来,当时我们把它叫做“标引”。这个概念是从企业级智能文档的应用和管理过程中总结出来:在企业级的文档管理中,需要能够在海量级的文档中快速定位需要的东西,需要对这些数据文档进行再加工,以便进行更好的搜索和展现,“标引”在这个过程中功不可末。通过大量专业人员把自己多年积累的的专业知识、行业经验,运用标引的这种概念融入到企业原有的文档数据库中,用人脑来参与整个索引、分析过程,可以大大提高海量级文档的智能应用水平。
用户桌面,其实是一个小型的文档数据库,同样可以把本人对于自己各种文件,比如音乐、照片、随笔等加上Tag后存到你的电脑中,对于文档的分类,查找,整理都有很大的帮助。这种感觉就像你把每天工作的桌面上、电脑屏幕上贴上“即事贴”,呵呵,“Tag你的桌面”。

在Xerdoc DSearch中,不仅仅存在Tag,还有Comments。Tag和Comments很像,却是两回事儿:Tag和Comments都有时效性,也都是人们主观的对事物的认识和反映。但是Tag更偏重于分类,通常比较短小,是一些词的组合,Comments更偏重于感想,通常是一段小的文字。比如,我对于一张数字照片的Tag是:

“VV 天坛 肖像”

而Comments则可以为:

“上周,我和VV去天坛放风筝,玩儿的很开心。- 2005.06.04”

Comments就像一段日记,而Tag的更大用途就是来管理、统计、汇总自己桌面上的信息。这些组合在一起的词,时间长了,就显示出他们的价值。比如:“tag:黄家驹”,可以看看我的桌面上有什么被打上家驹标签的东西,可能会包括很多MP3、网页、照片,这些就能将这些凌乱、无关联的文件根据Tag来整理,给出一个以用户Tag为中心的视图。

毫无疑问,Tag更大的用途是用来分享,我有我的Tag,你有你的Tag,那么,我想看看其他人的Tag呢?Flickr如此,Delicious如此,Blogbus亦如此。这些仅仅都是基于Web的应用,依赖于用户主动的Post,如何有效的将用户桌面上的Tag组织起来,来更好的分享呢?P2P也许是一个选择。
注:添加Tag的方式非常重要的,Flickr,Delicious都提供了非常容易添加Tag的方法,如何方便的让用户将桌面打上Tag呢?我也在思考。
Popularity: 25%

Popularity: 25%


Creative Commons License
This work is licensed under a Creative Commons License.

没有什么能够阻挡,你对未来的向往