在SQL中使用关键字对搜索结果进行java排名
我很难开始这个想法。我有一个SQL数据库和一个带有JAVA/Apache(tomcat)的html接口。我试图建立一个简单的数据库,对歌曲的名称进行排序,并与歌曲的关键字进行匹配。 例如,我输入了“epic,movies,queen,sing”这样的关键词,以及“queen bohemian rhapsody”这样的歌曲符合大多数标准。这是一首“电影”中的“epic”歌曲,由“queen”演唱,因此值为3。 而且在数据库中,像queen we is champion这样的歌曲会遇到所有关键词(史诗、电影、queen、sing)——>;所以这首歌应该是4
我已经涉猎了sql和一些JAVA代码中的count函数,但是我找不到一种方法来转换关键字,或者对它们进行计数以查看哪个结果更好
我应该去哪里学习如何制作这样的东西
非常感谢您的解释和链接。经过数小时的反复阅读,我对数据库结构有了更多的了解。并且有一个近乎实用的网页。我还有最后一个问题。查询给我一个song_ID和计数的结果。我想了一些方法来让歌曲名称也显示出来
我的第一个想法是将名称添加到连接表中
第二个是创建临时表(视图),然后使用该信息从其他表中查找数据
第三个是编写一个java代码来获取原始结果,然后只显示歌曲名称和计数
我想我缺少了一些简单的SQL能力来更好地(和更有效地)处理数据
# 1 楼答案
假设您的数据库有两列:tag和song_id,如下所示:
然后可以在SQL查询中执行所有操作:
如果您想要更复杂的文本搜索,也就是说,如果这个解决方案太慢,那么您应该研究Apache Lucene和/或Solr
# 2 楼答案
三张桌子:
song_id
为整数的歌曲tag
的标签,这是一个字符串song_id
和tag
所以如果在歌曲中我们有这些行(tuples):
在我们的标签中:
然后在歌曲标签中我们会有:
现在,要找到与特定标签匹配的歌曲,只需从歌曲标签表中选择相关行即可
原始设计的问题在于,在一行中存储了多个标记。相反,对于与给定歌曲匹配的每个标记,您应该有一个单独的行。如果三个标记匹配,则需要三行,以此类推
你可能想读一点关于database normalization的书来理解为什么你的原始设计不能有效地工作
(注意,在Joe K早些时候的回答中,他基本上提出了相同的建议,并给了您一个SQL查询,以确定哪些标签与哪些歌曲匹配。我刚刚对内容进行了进一步充实。)