<分区>
我想使用 php 7 和 MySQL 5.7 实现一个模糊搜索
。我在 Google 中进行了一些搜索,发现这些算法用于此目的:Metaphone、Levenshtein、Soundex 和 Hamming。
我想在我的表格中搜索歌曲标题
。因此,用户可以使用标题、艺术家姓名或两者都进行搜索拼写错误,例如 YouTube for ex。
用于此目的的最佳算法是什么以及如何在 php/MySQL 中实现
标签 php mysql sql fuzzy-search
<分区>
我想使用 php 7 和 MySQL 5.7 实现一个模糊搜索
。我在 Google 中进行了一些搜索,发现这些算法用于此目的:Metaphone、Levenshtein、Soundex 和 Hamming。
我想在我的表格中搜索歌曲标题
。因此,用户可以使用标题、艺术家姓名或两者都进行搜索拼写错误,例如 YouTube for ex。
用于此目的的最佳算法是什么以及如何在 php/MySQL 中实现
最佳答案
SOUNDEX() 是 20 世纪初的一种简单算法,旨在帮助查找美式英语中的专有名词。它是为 Bell System 目录服务运算符(operator)构建的。它旨在产生大量误报,人类可以从中选择可能的命中。它可能不适合您的目的,因为您的话大多不是专有名词。
变音位和双变音位是对 SOUNDEX 的改进。他们研究更多种类的词。
这些方法最好逐字逐句,而不是像歌曲名称这样的短语。如果您实现这些中的任何一个,您将需要实现逐字匹配和某种评分方案。好消息是这些适用于索引,并根据单词的发音工作。
Levenshtein 距离适用于单词或短语,适用于拼写而不是声音。它不适合索引搜索,因为这些距离成对工作。根据我的经验,对 Levenshtein 距离进行评分是很棘手的,因为与其他长短语相比,较长的短语与其他长短语的区别方式比短短语多得多。
在尝试使用这些原始算法构建模糊搜索之前,您可以尝试使用 MySQL FULLTEXT 搜索和 Sphinx。这两种技术都可以很好地处理短语评分和停用词。 Sphinx 还支持同义词表,这有助于处理常见的拼写错误。
关于php - Metaphone vs Levenshtein vs Soundex vs Hamming,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37378158/