0

我正在实现用于查找页面的标签,并且基本上具有 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;
4

2 回答 2

0

对于发现这个问题的任何人,我都选择了在 SQL 查询中使用 Match Against 似乎更好的方法。对于与链接相似的标签或搜索词,即关系、浪漫、爱情等,只需创建一串关键字,无论您想要多长,例如 $keywords = "romance, love, interview"; 当您了解新术语时,您可以添加它。然后运行sql查询 $sql = "SELECT * FROM pages Match (shdescript, longdescript) Against ('$keywords')"; 为此,您需要在 MYSQL 中在要搜索的字段上创建全文索引,即 shortdescript longdescript。好处是它实际上按相关性对您的搜索结果进行排名,因为某些 MYSQL 引擎具有一些相当强大的搜索引擎功能。例如,跨多个表的 Mysql 全文搜索相关性或仅使用默认值。

于 2012-05-31T11:59:59.393 回答
0

好的开始你只匹配标签=字符串时的情况,你用case结构声明排除所有其他标签。

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

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

于 2012-05-30T17:40:24.940 回答