sql - 如何高效构建和存储语义图?

标签 sql mysql database algorithm semantics

上网我遇到了Aquabrowser (无需点击,我会发布相关部分的图片)。

它有一种很好的方式来呈现搜索结果和发现语义链接的实体。

这是截取自 one 的屏幕截图的 demos .

在左侧,您有他们输入的单词和相关单词。 单击它们可以优化您的结果。

aqua

现在作为示例项目,我有一个电影实体和主题(如 worrd-war-2 或 prison-escape)及其关系的数据集。

现在我设想了几个用例,首先是用户以关键字开头的情况。 例如“第二次世界大战”。

然后我想以某种方式计算相关关键字并对它们进行排名。

我想像这样的一些 sql 查询:

假设“第二次世界大战”的 ID 为 3。

select keywordId, count(keywordId) as total from keywordRelations 
WHERE movieId IN (select movieId from keywordRelations 
                  join movies using (movieId)      
                  where keywordId=3) 
 group by keywordId order by total desc

基本上应该选择所有也有关键字 world-war-2 的电影,然后查找这些电影也有的关键字,并选择出现次数最多的电影。

我认为使用这些关键词我可以选择最匹配的电影并且有一个包含相似电影和相关关键词的漂亮标签云。

我认为这应该可行,但效率非常、非常、非常低。

而且它也只有一个层次或关系。

一定有更好的方法来做到这一点,但是如何呢??

我基本上有一个实体集合。它们可以是不同的实体(电影、 Actor 、主题、情节关键词)等。

我也有他们之间的关系。

必须以某种方式有效地计算实体的“语义距离”。

我也想实现更多层次的关系。

但我完全被困住了。好吧,我尝试了不同的方法,但一切都以一些算法结束,这些算法需要很长时间才能计算,并且运行时间呈指数增长。

是否有针对此优化的可用数据库系统?

有人能指出我正确的方向吗?

最佳答案

你可能想要一个 RDF triplestore . Redland是一个很常用的,但它真的取决于你的需要。查询在 SPARQL 中完成,不是 SQL。另外...你必须喝语义网 koolaid。

关于sql - 如何高效构建和存储语义图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4741863/

相关文章:

javascript - 使用 Firebase 每天限制帖子?查询所有数据太慢?

php - MySQL中如何优先显示最新记录?

python - 如何使用 git 跟踪 Django 模型的变化?

mysql - 如何获取相同值的有限记录

java - 如何从php获取json的COUNT(id)值到android

javascript - KnexJS 原始查询未按预期工作

sql - SQL复制与空值

sql - Where 语句上的顺序是否影响性能?

sql - 使用 SQL 查找缺失的日期

具有数据库可执行文件的 JavaFx 应用程序