2011-07-18 41 views
3

我是一个社区驱动的网站开发者/设计者:http://www.thegamesdb.net如何提高网站的名称搜索结果

我们的问题是相当简单:

Pac-Man的是游戏在网站上。一个人应该能够搜索“pacman”或“pac man”,并且应该显示“Pac-Man”结果。目前,这不会发生。

搜索代码片段如下,但完整的代码可以看出:http://code.google.com/p/thegamesdb/source/browse/trunk/tab_listseries.php

if ($function == 'Search') 
{ 
    $query = "SELECT g.*, p.name FROM games as g, platforms as p WHERE GameTitle LIKE '%$string%' and g.Platform = p.id"; 
    if(!empty($sortBy)) 
    { 
    $query .= " ORDER BY $sortBy, GameTitle ASC"; 
    } 
    else 
    { 
    $query .= " ORDER BY GameTitle"; 
    } 
} 

我没那么熟悉编码搜索技术,因此任何帮助,将不胜感激。我已经试过在网上搜索,我发现的只是一些预制的网站搜索引擎。我们并不想走这条路......这对我们的需求有点矫枉过正。

期待一些讨论,

亚历

回答

1

MySQL有一个名为SOUNDS LIKE的字符串比较功能。这可能是一个很好的用例。

http://dev.mysql.com/doc/refman/5.1/en/string-functions.html#operator_sounds-like

你可能修改像这样:

SELECT * FROM blah WHERE SOUNDEX(column) LIKE CONCAT('%', SOUNDEX($search_string), '%') 
+0

SOUNDEX基本消除空白,元音和重复是彼此相邻的字母。 – dqhendricks

+0

感谢你,这是一个完美的,轻量级的解决方案,我们的问题,并将现在很好地工作:) 在阅读兰迪的帖子后,我有一个玩Atomboys Double metaphone mysql函数....但它只是导致我的开发服务器坠毁。 这是一个很好的无忧解决方案,符合我们现有的代码。 – flexage

+0

@flexage很高兴我能帮忙! – dqhendricks

0

最终,你将需要决定如何执行模糊匹配。

对于您的示例 - 您可能会考虑删除所有空格和任何' - '字符 - 然后执行like '%$string%' match。您可能还会在LIKE的两侧考虑UPPER

你可以用自己的方式做更多或更少的决定模糊性的方法。

相关问题