MySQL / PHP全文搜索1个单词的相似度

时间:2012-07-10 11:39:46

标签: php mysql match full-text-search

我有一个客户想要管理他在网站上任何页面的SEO标题/描述,所以我考虑制作一个模块,他可以输入URL / TITLE / DESCRIPTION,网站将检查是否有条目对于该页面,如果有,请显示它。

我试过这个:

$url = 'http://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];

$q_seo = $conexio->query('SELECT modulseo.titol, modulseo.descripcio, MATCH(modulseo.url) AGAINST("'.$url.'") AS score FROM modulseo WHERE MATCH(modulseo.url) AGAINST("'.$url.'") ORDER BY score DESC LIMIT 0,1');

if(mysql_num_rows($q_seo)>0)
{
    $d_seo = mysql_fetch_array($q_seo);

    $titol = $d_seo['titol'];
    $descripcio = $d_seo['descripcio'];

}
else
{
    $titol = 'default title';
    $descripcio = 'default description';
}

这显然不起作用,因为我认为全文搜索仅适用于匹配不同的单词,而不是1个单词和另一个单词之间的相似性,因为客户端可以输入后端网址,如:

  • http://www.domain.com/index.php
  • http://domain.com/index.php
  • http://www.domain.com/index.php?language=fr
  • http://domain.com/index.php?language=fr
  • 等。

然后网站的用户可以访问这些网址中的任何一个,因此必须有一种方法可以将任何网址与客户端在后端使用的任何网址进行匹配。

有关如何执行此操作的任何线索?

1 个答案:

答案 0 :(得分:0)

使用LIKE %varible%进行搜索这是一个较慢的查询,但它会起作用。

您的表引擎必须是MyISAM,或者如果您使用MySQL -v 5.6+,您可以使用带有全文索引的InnoDB

mysql> select * from test;
+------+------+------------------------------+
| ids  | name | last_name                    |
+------+------+------------------------------+
|    0 | 0    | http://domain.com/index.php  |
|    1 | 0    | http://domain2.com/index.php |
|    2 | 0    | http://domain3.com/index.php |
+------+------+------------------------------+
3 rows in set (0.00 sec)

mysql> select * from test where last_name like '%http://domain.com/index.php%';
+------+------+-----------------------------+
| ids  | name | last_name                   |
+------+------+-----------------------------+
|    0 | 0    | http://domain.com/index.php |
+------+------+-----------------------------+
1 row in set (0.00 sec)