比如要实现对自己博客的所有文章进行全文搜索:
CREATE TABLE articles (
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
title VARCHAR(200),
content TEXT,
article_fc TEXT,
FULLTEXT idx (article_fc)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
插入文章时,对标题title和正文content这两个字段进行SCWS中文分词并用空格分隔后存入一个用于全文搜索的字段比如article_fc,该字段要求建立FullText全文索引.
用户搜索时,先用SCWS对输入进行分词比如获得关键词word1和word2,然后用MATCH AGAINST语句对进行全文搜索:
SELECT * FROM articles WHERE MATCH(article_fc) AGAINST(‘word1 word2’);
article_fc字段所在的表也可以和标题正文所在的文章表分开,查出后连接文章表读出标题正文即可.
SCWS是马明练hightman开发的一个PHP PECL中文分词扩展,提供有词典.如果不能安装PECL扩展,作者还提供了一个PHP实现的中文分词库PSCWS:
http://www.xunsearch.com/scws/
自己使用下方:
由于更新器是易语言编写,仅需为数据库增加一个fulltext全文索引的字段,在易语言更新时,直接post下方api即可
http://www.xunsearch.com/scws/api.php
.版本 2
.子程序 中文分词, 文本型
.参数 宝贝标题, 文本型
.局部变量 json内容, 文本型
.局部变量 word数组, 文本型, , "0"
.局部变量 t, 整数型
.局部变量 分词结果, 文本型
json内容 = 网页_访问S (“http://www.xunsearch.com/scws/api.php”, 1, “data=” + 编码_URL编码 (宝贝标题, , 真) + “&multi=7&ignore=yes&duality=yes&respond=json”)
文本_取中间_批量 (json内容, “word” + #引号 + “:” + #引号, #引号, word数组)
.计次循环首 (取数组成员数 (word数组), t)
分词结果 = 分词结果 + word数组 [t] + “ ”
.计次循环尾 ()
返回 (编码_usc2到ansi (分词结果))
在更新数据库时 直接添加!