Во время моего перехода из ТР2 0,54 -> ТР3 титаном 1,0/Tinkerpop 3,01Как сделать логику OR между вершинных индексов в Titan 1,0/ТР3 3.01 с использованием предиката текста
Я пытаюсь построить Gremlin запрос, которые делают «логическое ИЛИ "с Predicate Текст, между свойствами на различных индексов Vertex
Что-то вроде:
------------------- Предопределенная ES INDEXES: --- ---------------
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" match текст содержит префикс, ИЛИ все вершины с свойством "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 шаг с дедушкой, но gremlin throws error ...
Спасибо за любую помощь
Виталий
Почему не выполнялся шаг 'or()'? Как выглядела ваша попытка с 'или()'? http://tinkerpop.apache.org/docs/3.0.1-incubating/#or-step –
gV(). или (_(). has ('storyContent', textContainsPrefix ("abc")), _() .has ('userContent', textContainsPrefix ("dca"))), но также я хочу добавить шаг дедуги, чтобы игнорировать повторяющиеся вершины -------------------- ------------------------- Ошибка : ---------------------- --------- Нет сигнатуры метода: org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal.call() применим для типов аргументов:() значения: [] Возможные решения : tail(), wait(), any(), max(), wait (long), each (groovy.lang.Closure) Показать трассировку стека? [yN] – VitalyT
Можете ли вы обновить свой вопрос с помощью примерного графика и ожидаемого результата (в терминах вершин)? –