繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM