Sql高级搜索
我正在尝试为电子商店创建搜索引擎,我希望: 如果客户端在搜索栏中写入e.x galaxy white,我希望执行一个sql查询,将该字符串与产品相匹配,不仅与标题为galaxy white s3的产品相匹配,还与标题为galaxy s3 white 16 gb的产品相匹配Sql高级搜索,sql,search,expression,Sql,Search,Expression,我正在尝试为电子商店创建搜索引擎,我希望: 如果客户端在搜索栏中写入e.x galaxy white,我希望执行一个sql查询,将该字符串与产品相匹配,不仅与标题为galaxy white s3的产品相匹配,还与标题为galaxy s3 white 16 gb的产品相匹配 这可能吗?通过查看搜索关键字与数据库中标题之间的距离,可以轻松实现搜索。算法是一种很好的距离算法 更新:用于子词字符串搜索 Levenshtein对拼写错误有好处。除此之外,您还可以将字符串拆分为单词,然后对您的单词进行天真的
这可能吗?通过查看搜索关键字与数据库中标题之间的距离,可以轻松实现搜索。算法是一种很好的距离算法 更新:用于子词字符串搜索 Levenshtein对拼写错误有好处。除此之外,您还可以将字符串拆分为单词,然后对您的单词进行天真的字符串搜索。然后可以将结果与Levenshtein结果合并 例如,如果用户搜索“galaxy white s4” 您可以将此字符串拆分为三个单词:
galaxy
white
s4
然后,对于每个单词,您可以在标题中进行简单的字符串搜索,例如:
SELECT * FROM Titles
WHERE
Titles LIKE '%galaxy%' OR
Titles LIKE '%white%' OR
Titles LIKE '%s4%'
到目前为止,这应该能解决你的问题。但是我有一些建议
Michal Borek关于同义词的建议是个好主意。这会提高你的成绩。此外,我建议使用标签,例如,如果用户搜索一个属性(如bluetooth),您可能希望返回支持bluetooth的设备。更准确地说,可能需要提供“类似短语”(同义词)。例如,您正在Windows phone 8上搜索手机,您可能只需键入“WP8”,Levenshtein distance无法解决此问题。简短回答-是的,这是可能的。如果您正在寻找开箱即用的解决方案,这取决于您正在使用的RDM(SQLServer、Oracle、MySql、Postgres等)。因为这个问题没有提到同义词,所以我建议用Levenshtein这个词。你是对的,你的答案很好,虽然我的回答是一个建议。我尝试了Levenshtein,但我认为这不是很有用。如果用户使用galaxy white,我想向他展示所有标题包含galaxy和white的产品。Levenshtein只返回Strings的差异。好的。我也这么认为,拆分字符串,但在《权力的游戏》第三季这样的输入中,我得到了5个字符串,这是一个很长的查询。是的,但查询长度很少是一个问题。重要的是查询的成本。此外,还有其他几种算法。但我们只能根据要求提出建议。