在我从 TP2 0.54 -> TP3 titan 1.0 / Tinkerpop 3.01 迁移期间
我正在尝试构建 gremlin 查询,该查询在不同顶点索引的属性之间使用 Predicate Text 进行“逻辑或”
就像是:
------------------- 预定义的 ES 索引: ------------------
tg = TitanFactory.open('../conf/titan-cassandra-es.properties')
tm = tg.openManagement();
g=tg.traversal();
PropertyKey pNodeType = createPropertyKey(tm, "nodeType", String.class, Cardinality.SINGLE);
PropertyKey userContent = createPropertyKey(tm, "storyContent", String.class, Cardinality.SINGLE);
PropertyKey storyContent = createPropertyKey(tm, "userContent", String.class, Cardinality.SINGLE);
//"storyContent" : is elasticsearch backend index - mixed
tm.buildIndex(indexName, Vertex.class).addKey(storyContent, Mapping.TEXTSTRING.asParameter()).ib.addKey(pNodeType, Mapping.TEXTSTRING.asParameter()).buildMixedIndex("search");
//"userContent" : is elasticsearch backend index - mixed
tm.buildIndex(indexName, Vertex.class).addKey(userContent, Mapping.TEXTSTRING.asParameter()).ib.addKey(pNodeType, Mapping.TEXTSTRING.asParameter()).buildMixedIndex("search");
v1= g.addVertex()
v1.property("nodeType","USER")
v1.property("userContent" , "dccsdsadas")
v2= g.addVertex()
v2.property("nodeType","STORY")
v2.property("storyContent" , "abdsds")
v3= g.addVertex()
v3.property("nodeType","STORY")
v3.property("storyContent" , "xxxx")
v4= g.addVertex()
v4.property("nodeType","STORY")
v4.property("storyContent" , "abdsds") , etc'...
- - - - - - - - - - 预期结果: - - - - - -
我想返回所有具有属性“storyContent”的顶点匹配文本包含前缀,或者所有具有匹配其大小写的属性“userContent”的顶点。
在这种情况下返回 v1 和 v2 ,因为 v3 不匹配并且 v4 重复,因此必须通过 dedup 步骤忽略它
g.V().has("storyContent", textContainsPrefix("ab")) "OR" has("userContent", textContainsPrefix("dc"))
或者可能 :
g.V().or(_().has('storyContent', textContainsPrefix("abc")), _().has('userContent', textContainsPrefix("dcc")))
PS,
我以为使用 TP3 OR step 与 dedup ,但 gremlin 抛出错误......
谢谢你的帮助
维塔利