全部產品
Search
文件中心

Graph Compute:倒排查詢

更新時間:Jun 30, 2024

文法

  • 倒排查詢(sub_syntax)的文法類似ES查詢文法。

  • sub_syntax 用 JSON 描述,但是 JSON 中 {} 與現有的 iGraph 文法衝突,因此所有 {} 需要轉義為 \{ \}。

  • 倒排查詢支援四種查詢方式:單term、AND、OR、ANDNOT。

單term

  • "match"用於按索引召回查詢。

  • "name"是需要查詢的索引欄位名稱。

即便name是數字類型索引,那麼查詢關鍵詞同樣需要使用雙引號引起來,否則查詢失敗。

要在表配置頁面添加對應欄位的索引配置,否則查詢失敗。

\{"match": \{ "name" : "劉德華"\} \}

AND

  • "and" 節點下的子節點個數需要 >= 2

  • "and" 子節點可以是 match、 and、or

\{  "and" : [       \{ "match" : \{ "name" : "劉德華"\} \},       \{ "match" : \{ "id"   : "102" \} \},       \{ "or"    : \{ ...... \} \}   ]\}

OR

  • "or" 節點下的子節點個數需要 >= 2

  • "or" 子節點可以是 match、 and、or

\{   "or" : [              \{ "match" : \{ "name" : "劉德華"\} \},       \{ "match" : \{ "id"   : "102" \} \},       \{ "and"   : \{ ...... \} \}    ]\}

ANDNOT

  • "andnot" 節點下的子節點個數必須 >= 2

  • T1 ADNNOT T2 ANDNOT ... ANDNOT Tn 其實等價於T1 ANDNOT (T2 OR T3 ... OR Tn)

\{  "andnot" : [      "match" : \{ "name" : "劉德華"\},      "match" : \{ ...... \}   ]\}

樣本

Gremlin

  • 倒排檢索需要使用indexQuery

  • 如果有indexQuery step修飾V step的話,V step的輸入參數可以為空白。

  • kv、kkv 表不能使用倒排查詢

g("graph_name").V().hasLabel("thinkerpop_modern_software_index").indexQuery("{\"match\":{\"lang\":\"java\"}}")==> {"label":"thinkerpop_modern_software_index","lang":"java","name":"ripple","pk":"5"}

注意事項

  • 倒排表即時資料更新最好不要超過5k QPS,否則會對查詢效能有較大影響。

  • 倒排查詢預設有查詢截斷(單列3k)

  • 樣本:

    • 問題:有一個欄位是 f1 = "a,b,c,d",如果想查 f1 包含 a 或者 f1 包含 c ,如何用or和match組合實現?

    • 解答:f1 欄位配置索引欄位時需要特別配置分詞器(請看索引配置小節),索引建立時會分別以a b c d建立倒排索引。然後即可使用 match,or,and等進行組合查詢。