Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql高级搜索_Sql_Search_Expression - Fatal编程技术网

Sql高级搜索

Sql高级搜索,sql,search,expression,Sql,Search,Expression,我正在尝试为电子商店创建搜索引擎,我希望: 如果客户端在搜索栏中写入e.x galaxy white,我希望执行一个sql查询,将该字符串与产品相匹配,不仅与标题为galaxy white s3的产品相匹配,还与标题为galaxy s3 white 16 gb的产品相匹配 这可能吗?通过查看搜索关键字与数据库中标题之间的距离,可以轻松实现搜索。算法是一种很好的距离算法 更新:用于子词字符串搜索 Levenshtein对拼写错误有好处。除此之外,您还可以将字符串拆分为单词,然后对您的单词进行天真的

我正在尝试为电子商店创建搜索引擎,我希望:

如果客户端在搜索栏中写入e.x galaxy white,我希望执行一个sql查询,将该字符串与产品相匹配,不仅与标题为galaxy white s3的产品相匹配,还与标题为galaxy s3 white 16 gb的产品相匹配


这可能吗?

通过查看搜索关键字与数据库中标题之间的距离,可以轻松实现搜索。算法是一种很好的距离算法

更新:用于子词字符串搜索

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个字符串,这是一个很长的查询。是的,但查询长度很少是一个问题。重要的是查询的成本。此外,还有其他几种算法。但我们只能根据要求提出建议。