[英]Relevancy search with PHP and Mysql
go 这样做的最佳方法是什么?
我有列:track_name、artist_name、album_name
我希望所有列都与搜索查询匹配。 以及匹配时的一些灵活性。
mysql 之类的太严格了,即使是 %XXX%。 它匹配整个字符串,而不是部分。
您的 MySQL 查询可能有多个OR
子句,用于搜索用户输入的每个以空格分隔的单词。 例如,用户搜索“Queens of the Stoneage”可以在 SQL 中表示为SELECT * FROM songs WHERE artist_name LIKE "%Queens%" OR artist_name LIKE "Stoneage"
。
但是,这可能是不可取的,因为以%
开头的LIKE
搜索效率低下,并且在大型数据库上可能非常慢。
虽然我无法谈论性能影响,但您应该看看自然语言全文搜索。 这可能是您会发现的最有效的解决方案:
SELECT * FROM songs WHERE MATCH(track_name, artist_name, album_name) AGAINST('Queens of the Stoneage' IN NATURAL LANGUAGE MODE);
一些 PHP 函数确实存在用于确定文本字符串的相似性,但将这项工作保存在数据库中可能是最有效的(并且不那么令人沮丧):
我认为您需要重新考虑您的应用程序。 我从您的评论中了解到,您需要在程序中实现一些逻辑运算符,例如“and”、“or”和“not”。 这不仅仅是关于像全文索引这样的花哨算法或最长常见的 substring 这样的 mysql 匹配查询。 但我可能是错的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.