使用PHP和Mysql进行相关性搜索

时间:2011-08-10 05:16:34

标签: php mysql search full-text-search sql-like

最好的办法是什么?

我有列:track_name,artist_name,album_name

我希望所有列都与搜索查询匹配。匹配时有一定的灵活性。

mysql就像是太严格了,即使是%XXX%。它匹配字符串作为一个整体,而不是部分。

2 个答案:

答案 0 :(得分:2)

您的MySQL查询可能有多个OR子句,搜索用户输入的每个以空格分隔的单词。例如,用户搜索“Stone of the Stoneage”可能会在SQL中表示为SELECT * FROM songs WHERE artist_name LIKE "%Queens%" OR artist_name LIKE "Stoneage"

但是,这可能是不受欢迎的,因为以LIKE开头的%搜索效率低,而且在大型数据库上速度非常慢。

虽然我不能谈论性能影响,但你应该看看natural language full-text searches。它可能是您找到的最有效的解决方案:

SELECT * FROM songs WHERE MATCH(track_name, artist_name, album_name) AGAINST('Queens of the Stoneage' IN NATURAL LANGUAGE MODE);

确实存在一些用于确定文本字符串相似性的PHP函数,但是在数据库中保持这种工作可能是最有效的(而且不那么令人沮丧):

答案 1 :(得分:0)

我认为您需要重新考虑您的申请。我从您的评论中理解的是,您需要在程序中实现一些逻辑运算符,如“和”,“或”和“不”。它不仅仅是像全文索引这样的花哨算法,也不是像这个mysql匹配查询那样最长的常见子串。但我错了。