原文: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.