语法
倒排查询(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等进行组合查询。
文档内容是否对您有帮助?