文法
倒排查詢(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等進行組合查詢。