0

PHP垂直搜索引擎(转)

Posted in PHP at 五月 13th, 2007 / No Comments »

本人做的PHP垂直搜索引擎,欢迎提供意见。

演示见:
[url]http://yuelao.net/s.php?wd=%B0%D9%B6%C8google&c=php[/url]

全部用PHP开发完成。
包括采集蜘蛛,索引。
词库里约有60万词。
不妥之处望赐教。

52php 2008-1-27 03:45 PM
 
[url]http://yuelao.net/s.php?wd=%C3%B7%B4%A8%C4%DA%BF%E1&c=php[/url]:lol

52php 2008-1-27 03:47 PM
 
用php搞这个速度搞不了

奶瓶 2008-1-27 03:58 PM
 
很好,很强大

deng0685 2008-1-28 01:32 AM
 
代码呢

blue1225 2008-1-28 03:02 AM
 
哈哈,你搜“写真”试试

搜了写真,有4条内容,可惜没见一个写真的

风在芯中 2008-1-28 05:45 AM
 
请教索引,怎做到的,有用数据库吗?
是不是调Lucene的呀?

coolsail 2008-1-28 06:05 AM
 
貌似结果中有重复的.
不过总的说来还是很强大了.
方便的话,可以说说思路.

ccxxcc 2008-1-28 06:18 AM
 
用nutch抓取特定的网站,也可以做出来这样的搜索啊
php做的大型的搜索引擎感觉应该是玩具,不应该是产品

flyingswf 2008-1-28 08:09 AM
 
看了一下,还不错的。不过中间有很多问题的。我做过这样的产品,不过我用的是lucene,中间涉及到中文分词、解析html代码、搜索时候的同音词、同义词等等。

芽雨 2008-1-28 10:14 AM
 
真乃强人

howliu 2008-1-28 10:15 AM
 
技术 介绍说一下

syber 2008-1-28 03:46 PM
 
[quote]原帖由 [i]coolsail[/i] 于 2008-1-28 02:05 PM 发表
貌似结果中有重复的.
不过总的说来还是很强大了.
方便的话,可以说说思路. [/quote]
首先谢谢各位兄台提供意见。 目前做的还不完善,还有许多问题要解决。

没有用LUCENE,采集的时候程序出了点错误,已经修正了。
大体的思路其实不难,是根据 GOOGLE 关于搜索引擎的黑板报 来的。

[url]http://googlechinablog.com/2006/06/blog-post_27.html[/url]

每篇文章中,每个关键字所占的权重已经被我算出来了。记录到MYSQL表中
然后将所有关键字从MYSQL导出,将此包含此关键词的文章ID保存在PHP文件里,
按权重优先顺序排列,

搜索的时候直接从这些文件里获得搜索结果,不用从数据库查询。唯一使用数据库的地方是分词,把用户提交的内容分词。找到关键词的ID,然后调用 ID.php 得到结果。多个ID则取交集。
由于只是调用了一下文件而已,其它语言未必比PHP更优,不足之处应该是在分词上,如果能将词库放在内存中,那就可以完全不用MYSQL,则速度和效率将更进一步更高。

风在芯中 2008-2-4 06:29 AM
 
很好,,用了mysql实现起来更简单了

但有个问题

楼主说到,”多个ID则取交集”,这个交集不好算吧
比如两个关键字包含的文件都很多,那么算交集是不是也很慢啊?

奶瓶 2008-2-4 07:27 AM
 
[quote]原帖由 [i]风在芯中[/i] 于 2008-2-4 02:29 PM 发表
很好,,用了mysql实现起来更简单了

但有个问题

楼主说到,”多个ID则取交集”,这个交集不好算吧
比如两个关键字包含的文件都很多,那么算交集是不是也很慢啊? [/quote]
你看一下,baidu返回760条结果,google返回1000条结果
大结果集只是给出一个大约的数字,没有完整返回的

php5 2008-2-4 04:54 PM
 
分词、查库是有改进的地方

不过如此大的词库放在内存中,如果没有特殊的算法也不见得会比DB快

风在芯中 2008-2-5 01:17 AM
 
[quote]原帖由 [i]奶瓶[/i] 于 2008-2-4 03:27 PM 发表

你看一下,baidu返回760条结果,google返回1000条结果
大结果集只是给出一个大约的数字,没有完整返回的 [/quote]
来自google查找PHP的结果
[code]约有9,880,000,000项符合php的查询结果,以下是第1-10项 (搜索用时 0.17 秒)[/code]

没返回所有的结果集这是肯定的,但9,880,000,000怎出来的..如果用楼主的方法又是如果实现这个的

奶瓶 2008-2-5 01:25 AM
 
[quote]原帖由 [i]php5[/i] 于 2008-2-5 12:54 AM 发表
分词、查库是有改进的地方

不过如此大的词库放在内存中,如果没有特殊的算法也不见得会比DB快 [/quote]
词库大不到哪去,算法也特殊不到哪去,只是一个tmpfs上的sqlite或者bdb,就可以了,这好像不算特殊。
memcached、APC这种东西也是可以的,在做key的时候只要事先测试好,所有词的hash无碰撞,比如md5取12位,就可以了

风在芯中 2008-2-5 01:52 AM
 
前不久刚用过tmpfs上建sqlite做关键字系统,实际上写入效率提高很多,很明显..
但在查询上并没什么提高多少,,不知道是不是因为sqlite本身的缓存做得比较好,还是什么问题?

奶瓶 2008-2-5 02:17 AM
 
词库再大也就是MB级别的
SELECT速度还是可以的,用内存主要是为了缓解IO瓶颈,sqlite、bdb本身也是有内存管理的
其实sqlite非常擅长INSERT(sync)

Published in PHP

No Responses to “PHP垂直搜索引擎(转)”

Leave a Reply

请输入算式结果(看不清请点击图片)
(必须)