MYSQL/PHP 标签搜索引擎


MYSQL/PHP tag search engine

我正在实现用于查找页面的标签,并且基本上具有3个表结构,标签,页面和标签页。 对于网站的菜单系统,我希望将少量链接映射到标签,以便对相关性进行有根据的猜测。 不是寻找谷歌级别的搜索结果,而是不仅仅是搜索一个词,会排除许多结果。 例如,对于浪漫链接,我想选择诸如爱情,关系等标签。 除了浪漫。 由于标签如此普遍,是否有一个已建立的标签引擎来按标签提取结果而没有完全匹配? 我正在考虑构建一个包含多个搜索词的 where 子句,但它开始变得有点笨拙。 有没有比下面更好的方法?

可能的方法:

$sql = "SELECT * FROM tagpages WHERE";
switch ($tag)
{
case "romance": 
$where = "tag = 'relationship' || 
tag== 'love' ||
tag== 'breakup";
break;
case "sports":
$where = "tag = 'football' || 
tag== 'baseball' ||
tag== 'hockey";
break;
case "politics":
$where = "tag = 'election' || 
tag== 'presidential'";
break;
default:
$where = "";
}
$sql .= $where;
好吧,

首先,您只匹配标签=字符串时的大小写,您正在声明使用大小写结构以排除所有其他标签。

您可以使用"%"模数符号来匹配 LIKE 字符或匹配字符,然后对字符串的末尾进行模量,这意味着字符串的其余部分看起来像任何字符,只要模号之前的这些字符匹配即可。"CHAR%"将返回字符、符宵

您可以使用<>排除,这意味着不是,但您可能需要切换到 IF...ELSE 结构,如果您知道所有可能的匹配项,我认为您可以声明标签,然后它们将被编号为 1...n,您可以在占位符编号上匹配......不确定这一点。

对于任何发现这个问题的人,我选择了在SQL查询中使用Match Against 的更好方法。 对于与链接相似的标签或搜索词,即关系、浪漫、爱情等,只需创建一串您想要的关键字,例如 $keywords ="浪漫、爱情、婚姻"; 您可以在了解新术语时添加它。 然后运行一个 sql 查询$sql = "选择 * FROM 页面匹配 (shdescript, longdescript) Against ('$keywords')"; 为此,您需要在 MYSQL 中在要搜索的字段上创建一个全文索引,即简短的长描述。 好消息是它实际上按相关性对您的搜索结果进行排名,因为某些 MYSQL 引擎具有一些相当强大的搜索引擎功能。 例如,您可以指示它使用数学百分比对某些内容进行加权,例如在多个表中的Mysql全文搜索相关性中,或者只是使用默认值。