我正在尝试为电子商店创建一个搜索引擎,我想要这样做:
如果客户端在搜索栏中写了ex galaxy white,我想执行一个与该字符串匹配的sql查询,不仅是像galaxy white s3这样的标题,还有像galaxy s3 white 16 gb这样的标题。
这可能吗?
答案 0 :(得分:1)
您可以通过查看搜索到的关键字与数据库中标题之间的距离来轻松实现搜索。 Levenshtein distance算法是一种很好的距离算法。
更新:对于子字符串搜索
Levenshtein善于犯罪。除此之外,您可以将字符串拆分为单词,然后使用Naïve字符串搜索您的单词。然后你可以将结果与Levenshtein结果结合起来。
例如,如果用户搜索“galaxy white s4”;
您可以将此字符串拆分为三个字:
galaxy
white
s4
然后,对于每个单词,您可以在标题中进行Naïve字符串搜索,例如:
SELECT * FROM Titles
WHERE
Titles LIKE '%galaxy%' OR
Titles LIKE '%white%' OR
Titles LIKE '%s4%'
到目前为止,这应该可以解决您的问题。但我有一些建议!
Michal Borek建议使用同义词是一个好主意。它会改善你的结果。另外我建议使用标签,例如,如果用户搜索属性说蓝牙,你可能想要返回支持蓝牙的设备。
答案 1 :(得分:1)
为了更准确,可能需要提供“类似短语”(同义词)。因为例如你在Windows Phone 8上搜索手机,你可能只需输入“WP8”,Levenshtein距离不能解决这个问题。