GraphGists

目标

该 graphgist 的目的是对书籍信息进行排序。这个想法可以被书籍管理系统、内容推荐系统等使用。首先,介绍了设计的數據模型。接下来,加载示例数据并运行示例 Cypher 查询以展示该模型的应用。

数据模型

Book 概念是模型的核心,其他实体及其关系描述了它。该模型包含以下域和关系

表 1. 域
属性 示例

Book

title - 原始

哈利·波特与魔法石

Book Series

title

哈利·波特

Keyword

name

魔法,学生

Genre

name

奇幻,神秘

Person

name, surname

J. K. 罗琳

Translation

title - 翻译

哈利·波特与魔法石

Language

name

英语,法语

EBook

link

linkToHarryPotterEBook

Review

link

linkToReview1, linkToReview2

Movie

title

哈利·波特与魔法石

Time

世纪,年,季节,日期

1997,

Place

洲,国家,城市名称,地址

美国,英国

Publishing House

name

布鲁姆斯伯里出版社,亚瑟·A·莱文图书

表 2. 关系
起始节点 关系 结束节点 示例

Book

IS_PART_OF

Book Series

哈利·波特与魔法石 IS_PART_OF (顺序号:1) 哈利·波特

Book

DESCRIBED_BY

Keyword

哈利·波特与魔法石 DESCRIBED_BY 魔法

Book

OF_TYPE

Genre

哈利·波特与魔法石 OF_TYPE 奇幻

Book

WRITTEN_BY

Person

哈利·波特与魔法石 WRITTEN_BY J. K. 罗琳

Book

TRANSLATED_TO

Translation

哈利·波特与魔法石 TRANSLATED_TO 哈利·波特与魔法石

Book

HAS_ORIGINAL_LANGUAGE

Language

哈利·波特与魔法石 HAS_ORIGINAL_LANGUAGE 英语

Translation

OF_LANGUAGE

Language

哈利·波特与魔法石 OF_LANGUAGE 法语

Translation

MADE_BY

Person

哈利·波特与魔法石 MADE_BY 让-弗朗索瓦·梅纳德

Book

HAS_E_VERSION

EBook

哈利·波特与魔法石 HAS_E_VERSION eHarryPotter

Translation

HAS_E_VERSION

EBook

哈利·波特与魔法石 HAS_E_VERSION eHarryPotterInFrench

Book

HAS_REVIEW

Review

哈利·波特与魔法石 HAS_REVIEW review1

Book

MADE_INTO

Movie

哈利·波特与魔法石 MADE_INTO 哈利·波特与魔法石

Book

WHEN_ACTION

Time

哈利·波特与魔法石 WHEN_ACTION XX 世纪

Book

WHEN_PUBLISHED

Time

哈利·波特与魔法石 WHEN_PUBLISHED 1997

Book

WHERE_ACTION

Place

哈利·波特与魔法石 WHERE_ACTION 伦敦

Book

WHERE_PUBLISHED

Place

哈利·波特与魔法石 WHERE_PUBLISHED 英国

Book

PUBLISHED_BY

Publishing House

哈利·波特与魔法石 PUBLISHED_BY 布鲁姆斯伯里出版社

图数据上传

首先,测试数据被添加到数据库中。

上传的数据包含以下书籍及其相关信息

  • 哈利·波特与魔法石 由 J. K. 罗琳用英语创作,是哈利·波特系列的一部分。它于 1997 年由布鲁姆斯伯里出版社和亚瑟·A·莱文图书出版。这本书被翻译成多种语言,包括法语。此外,还有一部根据这本书改编的电影。故事发生在当代的伦敦。描述这部电影的关键词:魔法,学生。

  • 偷书贼 由马库斯·祖萨克用英语创作。它于 2005 年首次由澳大利亚的皮卡多出版社出版。故事发生在 20 世纪的纳粹德国。此外,还有一部根据这本书改编的电影。描述这部电影的关键词:死亡,学生,犹太教。

  • 汤姆·索亚历险记 由马克·吐温用英语创作。它于 1876 年在美国由美国出版公司出版。故事发生在美国。描述这部电影的关键词:男孩,儿童小说,变化,心理学。

应用程序

下面的数据模型和查询能够根据多种标准检索书籍信息。

查找类型为“小说”的书籍

MATCH (b:Book)-[:OF_TYPE]->(:Genre{name:'novel'}),
       b-[:DESCRIBED_BY]->(k:Keyword)
RETURN b.title AS book, collect(k.name) as keywords
ORDER BY b.title

查找由“布鲁姆斯伯里出版社”出版的书籍

MATCH (b:Book)-[:PUBLISHED_BY]->(:PublishingHouse{name:'Bloomsbury Publishing'}),
       b-[:WHEN_PUBLISHED]->(t:Time),
       b-[:WHERE_PUBLISHED]->(p:Place)
RETURN b.title AS book, t.year as time, p.country as place
ORDER BY t DESC, b.title

查找故事发生在“德国”20 世纪的书籍

MATCH (b:Book)-[:WHERE_ACTION]->(:Place{country:'Germany'}),
       b-[:WHEN_ACTION]->(:Time{century:'XX'})
RETURN b.title AS book
ORDER BY b.title

查找所有被改编成电影的书籍

MATCH (b:Book)-[:MADE_INTO]->(m:Movie),
       b-[:WHEN_PUBLISHED]->(t:Time)
WHERE m.title<>""
RETURN b.title AS book, t.year as time
ORDER BY t.year DESC, b.title

查找书籍翻译成外语的书籍

MATCH (b:Book)-[:TRANSLATED_TO]->(t:Translation)
RETURN DISTINCT b.title AS book, collect(t.title) as translations
ORDER BY b.title

总结

所呈现的模型是可扩展的:可以添加关于其他内容的信息,例如,与特定书籍相对应的电影、有声读物、电脑游戏。这些排序信息构成了关于书籍的知识库,可用于搜索特定内容或内容推荐。可以添加一个以经典社交网络形式存在的额外层,以实现根据个人阅读口味对个人进行画像、寻找相似的人(根据其阅读口味)等功能。该模型也可以用于证明对该领域进行图模型和查询比使用关系型数据库要容易得多。