PHP+MYSQL+SCWS 做自己的站内搜索引擎

天底下竟然有这么一种站内搜索引擎,它支持中文分词,支持全文搜索,无须任何扩展,不用对服务器进行任何设置,只要支持PHP和MYSQL就行,他操作简单,效率高,效果好.这就是PHP+MYSQL+SCWS 站内搜索引擎.

事实上,无论大小,从新浪到爱卡汽车网,从日PV过亿的网站到我自己的个人博客,都需要站内搜索引擎.站内搜索引擎对于网站的作用,是不言而喻的.最直接的作用是让用户以最直接的方式,最快的速度在你的网站里找到他想要的东西.而不是再到百度谷歌去,搜索到别人的网站.

(一) 最基本的站内搜素利用SQL的LIKE

例如

SELECT * FROM bbs_threads WHERE subject LIKE '%搜索引擎%' LIMIT 10

优点:太容易了,是人都会

缺点: 1. 每次执行LIKE语句都需要一次表遍历,用的是字符串比较,效率太低. 2. 不能分词,只能整句话搜索.如果搜索词较长,几乎搜索不出任何结果.如果加上分词功能,相当于一条语句里使用好几个LIKE,同1.

(二) 谷歌自定义搜索

利用谷歌搜索引擎API以及谷歌强大的搜索功能,建立自己的站内搜索. 演示: http://www.lusongsong.com/search.html?cx=014724041144905348996:pf5fnahnzuw&cof=FORID:11&ie=UTF-8&q=危机&sa=搜索&siteurl=lusongsong.com/

优点: 省心,没有比这个再省心的了.你啥都不用管.谷歌都是自家的了,人家的搜索算法,那怎么是咱们能比得了的呢.

缺点: 1.需要使用IFRAME,或者直接打开谷歌的页面,或者用更复杂的API来实现. 2.只能按照文本搜索,只能全站搜索.我要想在某个频道下,搜索指定类型的文章等要求谷歌就不能实现了.一句话,就是不能自定义. 3.如果你的网站小,谷歌人家都不带收录你,啥也搜不出来你咋办?

(三) lucene 全世界最好的开放源代码搜索引擎

呃…没啥好介绍的,直接看优缺点吧

优点: 完全开放源代码,完全可以自定义,完全…..

缺点: java写的,哥不会.你会java?你改个试试

(四) PHP+MYSQL+SCWS 做自己的站内搜索引擎

千呼万唤始出来!

MySQL支持全文索引和搜索。全文索引在 MySQL 中是一个 FULLTEXT 类型索引。FULLTEXT 索引用于 MyISAM 表,可以在 CREATE TABLE 时或之后使用 ALTER TABLE 或 CREATE INDEX 在 CHAR、VARCHAR 或 TEXT 列上创建。

函数 MATCH() 对照一个文本集(包含在一个 FULLTEXT 索引中的一个或多个列的列集)执行一个自然语言搜索一个字符串。搜索字符串做为 AGAINST() 的参数被给定。搜索以忽略字母大小写的方式执行。对于表中的每个记录行,MATCH() 返回一个相关性值。即,在搜索字符串与记录行在 MATCH() 列表中指定的列的文本之间的相似性尺度。

当 MATCH() 被使用在一个 WHERE 子句中时,返回的记录行被自动地以相关性从高到低的次序排序。相关性值是非负的浮点数字。零相关性意味着不相似。

在英语环境下,使用PHP和MYSQL就完全能够建立全文检索环境.步骤为:

1. 建立内容表,灌入数据,在需要全文检索的字段上建立FULLTEXT索引

2. 利用MATCH函数执行搜索条件

3. 处理返回的数据,显示结果

简单吧。。。

问题是,中文不是自分词的语言,在MYSQL开来一大段中文就是一个单词,全文检索就失效了.解决这个问题的办法是,在灌入数据和搜索前,利用其他的工具来进行分词,将大段的中文分隔为一个一个的词,类似与英文的单词.

最简单的工具就是SCWS. 官方站点: http://www.ftphp.com/scws/

SCWS 是 Simple Chinese Words Segmentation 的缩写,即简易中文分词系统。

这是一套基于词频词典的机械中文分词引擎,它能将一整段的汉字基本正确的切分成词。词是汉语的基本语素单位,而书写的时候不像英语会在词之间用空格分开,所以如何准确而又快速的分词一直是中文分词的攻关难点。

SCWS 在概念上并无创新成分,采用的是自行采集的词频词典,并辅以一定程度上的专有名称、人名、地名、数字年代等规则集,经小范围测试大概准确率在 90% ~ 95% 之间,已能基本满足一些中小型搜索引擎、关键字提取等场合运用。 SCWS 采用纯 C 代码开发,以 Unix-Like OS 为主要平台环境,提供共享函数库,方便植入各种现有软件系统。此外它支持 GBK,UTF-8,BIG5 等汉字编码,切词效率高。

SCWS提供了纯PHP代码编写的中文分词类,使它不需要做任何额外的扩展就能在机会所有的服务器上使用.

支持中文的基于PHP+MYSQL的全文检索的步骤为:

1. 建立内容表(,将数据分词),灌入数据,在需要全文检索的字段上建立FULLTEXT索引

2. (将要搜索的内容先分词再) 利用MATCH函数执行搜索条件

3. 处理返回的数据,显示结果

仍然是SO EASY!

一个演示的例子: http://www.bnet.com.cn/files/search.php?word=%CA%D5%B9%BA&page=3

执行搜索的语句是:

SELECT SQL_CALC_FOUND_ROWS *, MATCH (titlewords, keywords, author, contentwords) AGAINST ('$words') AS matchscore
FROM search
WHERE MATCH (titlewords, keywords, author, contentwords) AGAINST ('$words') > 0.5
LIMIT 10

最后: 感谢全世界的开源作者

3 Replies to “PHP+MYSQL+SCWS 做自己的站内搜索引擎

  1. 太好了,就想做这个功能。本来也找了很多lucene资料,不懂Java苦啊。。。。。。今天看到救星了

  2. 不错,但权重方面还要功究下,因为搜索时要么前面的词为主,要么后面的为主,,
    我想要下整个文件,不知有没有?我用的是PHPWIND8.5的.WAP版能做出来吗.

发表评论

电子邮件地址不会被公开。

*