原文:https://docs.dgraph.io/query-language/
dgraph的graphQL+-是基于facebook的graphQL语言的一门查询语言。graphQL并不是为图数据库开发的语言,而是一种比较像图的查询语法,schema和子图让它成为一门很棒的语言。我们开发者修改了这门语言(graphQL),让它可以更好地支持图的操作,我们增减了graphQL的一些功能以让它能更好地支持图数据库。所以我们把这个被简化丰富过的语言叫做graphQL+-.
graphQL+-还在开发中,我们仍然在增加一些feature,我们将来可能还会简化它。
这个文档是dgraph的查询参考材料,它不是一个tutorial。如果你已经知道怎样用graphQL+-写查询语句但想知道一些细节,比如语法,indices或是功能等等,那么这个文档很适合你。
注:如果你是dgraph的新手,想要学习怎么用dgraph和graphQL+-,可以参考 https://tour.dgraph.io。
Running examples
文档例子用的是21 million triples(不知道怎么翻译)关于电影和演员的数据。这些示例的查询语句运行后返回数据。这些查询底层其实是由https://play.dgraph.io/.的Dgraph实例执行出来的。为了能本地运行这些查询语句或为了能体验更多,建议先到Getting Started 看下,这里面展示了怎么加载数据集。
GraphQL+- 基本原理
一个graphQL+-查询语句基于查询的条件来找相应的node,匹配图中的部分并返回。
一个查询是由一些内部嵌套的块组成的。由一个左大括号开始,里面写的是一些过滤条件。
返回值
每个查询都有一个名字,写在查询的最开始,返回值也会以这个名字返回。
如果一个边是一值类型,那么这个值可以通过给出边名的形式返回。
查询示例:在这个鸽子中,边(edge)联系了电影、导演和演员,电影有一个名字、发行日期、标识符。这个bladerunner的查询语句,过滤条件是一个电影的名字
这里省略了很多。。。。之后慢慢看
语言支持
Note :A @lang
directive must be specified in the schema to query or mutate predicates with language tags.如(@lang是表明当前是什么语言标签)
dgraph支持UTF-8字符串
在一个查询中,假设一个字符串edge,那么语法
edge@lang1:...:langN
表示:
-最多将返回一条结果
-偏好列表是从左至右:如果一个值在最左边的语言中没有找到,那么将去匹配下一个,以次类推。
-如果在所有的语言中都没有找到,那么没有返回值。
-最后的点“.”表示如果没有找到任何一个语言,那么会随便返回一个语言(不知道是不是这个意思),原句是A final .
means that a value without a specified language is returned or if there is no value without language, a value in “some” language is returned.
示例:
name=>寻找一个未加标签的字符串,如果没有未加标签的值那么什么也不返回
name@.=>查询一个未加标签的字符串,如果没有那么可以返回任意语言
name@en=>查询一个加了en标签的字符串,如果没有那什么也不返回
name@en:.=>查询一个加了en标签的字符串,然后查询未加标签的字符串,如果没有那么返回任意语言
name@en:pl=>查询en,然后查询pl,如果什么都没有那什么也不返回
name@en:pl:.=>查询en,然后查询pl,然后未加标签,如果没有那么返回任意语言
Note: In functions, language lists are not allowed. Single language, .
notation and attribute name without language tag works as described above.
alloftext
, anyoftext
), when no language is specified, default (English) Full Text Search tokenizer is used.