java - 使用 SQL 中的关键字对搜索结果进行排名

标签 java sql database-design full-text-search search-engine

我很难开始这个想法。我有一个 SQL 数据库和一个 JAVA/Apache(tomcat) 的 html 界面。我试图制作一个简单的数据库,对歌曲名称进行排序并与歌曲的关键字匹配。 例如,我输入了“史诗、电影、女王、歌唱”等关键字,而像《女王波西米亚狂想曲》这样的歌曲满足了大部分标准,它是一首来自“电影”并由“女王”演唱的“史诗”歌曲,因此这将成为值为 3。 而且在数据库中,像《queen we are the Champion》这样的歌曲将满足所有关键字(史诗、电影、女王、歌唱)-> 所以这首歌将是 4。

我涉足了 sql 和一些 JAVA 代码中的计数函数,但我找不到一种方法来切换关键字,或者对它们进行计数以查看哪个结果更好。

我应该去哪里学习如何制作这样的东西?

<小时/>

非常感谢您的解释和链接。经过几个小时的阅读和重读,我对数据库结构有了更多的了解。并拥有一个近乎实用的网页。我还有最后一个问题。查询给出了歌曲 ID 和计数的结果。我想了几种方法来显示歌曲名称。

我的第一个想法是将名称添加到连接表中。

第二步是创建一个临时表( View ),然后使用该信息从其他表中查找数据。

第三步是编写一个java代码来获取原始结果,然后只显示歌曲名称和计数。 ....

我认为我在 SQL 功能中缺少一些简单的功能来更好(更有效)地处理数据。

最佳答案

假设您的数据库有两列:tag 和 Song_id,如下所示:

CREATE TABLE tags(tag STRING KEY, song_id INT);

然后您可以在 SQL 查询中执行所有操作:

SELECT song_id, count(*)
FROM tags
WHERE tag IN ("epic", "movie", "queen", "sing")
GROUP BY song_id
ORDER BY count(*) DESC;

如果您想要更复杂的文本搜索,即如果此解决方案最终太慢,您应该查看 Apache Lucene和/或 Solr .

关于java - 使用 SQL 中的关键字对搜索结果进行排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12100622/

相关文章:

java - 如何手动生成JUnit测试报告

MySQL:左连接与左连接

php - 网页附加内容的标准DB表结构?

php - 如何在 Nermalization 中跟踪更改和存储计算内容?

java - 通过 OJDBC 批量插入 Oracle 数据库的性能

java - OOP 使用子类的实例初始化实例变量

mysql - 仅获取最后连续一年的行

database - 什么数据库适合非结构化数据

java - 异常未传播到 Apache Camel 中的错误处理程序

sql - 将表一值与 postgresql 中的两个不同表进行比较