Mysql匹配...反对简单就像"%term%"

Gal*_*Gal 5 mysql full-text-search

有什么不对:

$term = $_POST['search'];

function buildQuery($exploded,$count,$query)
{
   if(count($exploded)>$count) 
   {
      $query.= ' AND column LIKE "%'. $exploded[$count] .'%"';
      return buildQuery($exploded,$count+1,$query);
   }
   return $query;
}

$exploded = explode(' ',$term);
$query = buildQuery($exploded,1,
'SELECT * FROM table WHERE column LIKE "%'. $exploded[0] .'%"');
Run Code Online (Sandbox Code Playgroud)

然后查询数据库以按特定顺序检索结果,而不是使用myIsam-only sql match ...对?

它会大大磨损性能吗?

Chr*_*rez 6

不同之处在于MySQL在幕后使用的算法中找到了您的数据.全文搜索还允许您根据相关性进行排序.在LIKE大多数条件下的搜索会做一个全表扫描,因此这取决于数据量,你可以看到它的性能问题.处理大型行集时,全文引擎也可能存在性能问题.

另外,我要添加到此代码中的一件事是逃避爆炸值.也许打电话给mysql_real_escape_string()


Bil*_*win 6

你可以查看我最近为MySQL大学所做的演讲:

http://forge.mysql.com/wiki/Practical_Full-Text_Search_in_MySQL

幻灯片也在这里:

http://www.slideshare.net/billkarwin/practical-full-text-search-with-my-sql

在我的测试中,使用LIKE '%pattern%'速度比使用MySQL FULLTEXT索引慢300多倍.我的测试数据是来自StackOverflow 10月数据转储的150万个帖子.