我正在尝试为电子商店创建一个搜索引擎,我想做这个:
如果客户在搜索栏中写 ex galaxy white,我想执行一个 sql 查询,该查询将该字符串与产品匹配,不仅是具有像 Galaxy white s3 这样的标题的产品,而且还有像 Galaxy s3 white 16 gb 这样的标题的产品。
那可能吗?
我正在尝试为电子商店创建一个搜索引擎,我想做这个:
如果客户在搜索栏中写 ex galaxy white,我想执行一个 sql 查询,该查询将该字符串与产品匹配,不仅是具有像 Galaxy white s3 这样的标题的产品,而且还有像 Galaxy s3 white 16 gb 这样的标题的产品。
那可能吗?
为了更准确,可能需要提供“相似短语”(同义词)。因为例如您在 Windows Phone 8 上搜索手机,而您可能只需键入“WP8”,Levenshtein 距离无法解决该问题。
您可以通过查看搜索的关键字与数据库中的标题之间的距离来轻松实现搜索。Levenshtein 距离算法是一个很好的距离算法。
更新:对于子词字符串搜索
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 的同义词建议是个好主意。它会改善你的结果。我还建议使用标签,例如,如果用户搜索属性说蓝牙,您可能希望返回支持蓝牙的设备。