日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

表達式

語法規則

logical_attribute_expression := attribute_expression logical_operator attribute_expression 
logical_operator := AND | OR
relational_attribute_expression := attribute_expression relational_operator attribute_expression 
relational_operator := '=' | '>' | '<' | '<=' | '>=' | '!='
arithmatic_attribute_expression := attribute_expression arithmatic_operator attribute_expression | atomic_attribute_expression
arithmatic_operator := '+' | '-'|'*'|'/' 
atomic_attribute_expression := attribute_name | number_literal 
attribute_name := IDENTIFIER
number_literal := NUMBER
  • attribute_expression支持數字、string、多值類型。

  • string支持所有的關系運算,不支持算術運算。

  • 多值類型僅支持關系運算中的"="和"!="。

    • 多值的邏輯=的語義:該attribute中包含filter的值。

運算符

+    -   *  /    >    <    =   !=   >=    <=    AND    OR    ()    @
  • @為位與

  • AND為邏輯與

表達式

  • 功能:封裝查詢過程中的求值邏輯

  • 備注:所有表達式只支持同類型字段之間的運算

算術表達式

  • 算術表達式的求值結果是非布爾類型。

  • 簡單變量:a

  • 四則運算:a + b, a + b - c, a + b / c等

  • 常量: 119

邏輯表達式

  • 邏輯表達式的求值結果是布爾類型。

  • 邏輯運算AND、OR

    • a AND b,a OR b

    • a及b都可以是表達式,如:uid=1000 OR uid=2000

  • 關系運算><=<=>=!=

    • a > b, a < b,a = b, a <= b, a >=b

優化建議:

一個Query不要超過10個過濾條件;否則,會有很大的性能問題。

同質的過濾條件,可以使用 in/notin/in_string/notin_string 等進行合并

數學函數表達式

  • 三角函數sin、cos、tan、cot、asin、acos、atab、sinh、cosh、tanh

    • 含義:和c++的數學庫保持一致,不再贅述。

    • 樣例:sin(a),其中a是數值類型表達式

  • 類型轉換函數to_double、to_int

    • to_double(a)

    • 含義:返回double類型的a

    • 備注:a可以是僅包含數字類型的字符串表達式

    • to_int(a)

    • 含義:返回long類型的a

    • 備注:a可以是僅包含數字類型的字符串表達式

  • 數學函數abs、ln、log10、exp、sqrt、trunc、ceil、floor、round、pow(a, b)

    • 含義:C++的數學庫保持一致

  • 條件函數if

    • 格式:if(bool_expression, a, b)

    • 含義:如果bool_expression為true,那么返回a,如果為false,那么返回b。

    • 備注

    • bool_expression的求值結果必須是bool類型

    • a和b的類型必須保持一致,并且整個函數的返回值類型和a保持一致。

    • 樣例:if(a > 10, b, c)。如果a > 10,返回b,否則返回c。

  • 條件函數case

    • 格式:case(bool_expression, a, bool_expression, b, c....)

    • 含義:順序判斷哪一個bool_expression為真,則返回它后面那個表達式的值。否則返回最后一個值。

    • 備注

    • case表達式必須有奇數個數的參數

    • a,b,c等的值類型必須保持一致。

    • 樣例:case(a > 20, b, a > 10, c, a > 5, d, e)。如果a > 20,返回b;否則,如果a > 10,返回c;否則,如果a > 5,返回d;否則,返回e。

  • 范圍函數in、notin、in_string、notin_string

    • in(a, b) 或者 notin(a, b)

    • 備注

    • a可以是任意數值表達式,可以是多值或單值字段。多值的含義是滿足一個就為true

    • b必須是常量數值類型表達式的值的列表,用分割開

    • a和b的常量值的類型必須一致

    • 此表達式返回bool類型

    • 樣例:in(nid, "10|12|13"),notin(tag_id, "101|203|405")

    • 這種寫法性能上大優于nid=10 OR nid=20 OR nid=30的寫法

    • in_string(filed_name, group_condition, separator)

    • 備注

    • filed_name是字符串表達式

    • group_condition必須是字符串類型表達式的值的列表

    • separator用于指定的分隔符。

    • 此表達式返回bool類型

    • 樣例:in_string(name, "abc|cde|fgh", "|"),notin_string(tag, "aaa,bbb,ccc", ",")

  • 范圍計數函數count_in

    • 格式:count_in(a, b)

    • 備注

    • a可以是任意數值表達式,可以是多值或單值字段。多值的含義是滿足一個就計數

    • b必須是常量數值類型表達式的值的列表,用分割開

    • a和b的常量值的類型必須一致

    • 此表達式返回整數類型

    • 樣例:count_in(nid, "10|13|12|13")

    • 若nid=10,結果為1

    • 若nid=13, 結果為2

    • 若nid=12 13, 結果為3 (12命中一個,13命中兩個)

    • 若nid=13 12 13,結果為5 (第一個13命中2個,12命中一個,第二個13命中2個)

示例

Gremlin

  • 表達式支持對實體的屬性進行邏輯運算、關系運算和算術運算。

  • filter()及可以被by()修飾的單步都可以使用表達式

g("thinkerpop").V("1;2;3;4;5;6").hasLabel("thinkerpop_modern_person").filter("age<30")
==> {"label":"thinkerpop_modern_person","age":29,"name":"marko","pk":"1"}
==> {"label":"thinkerpop_modern_person","age":27,"name":"vadas","pk":"2"}