Gremlin - поиск нескольких подстрок
Для данной вершины я могу определить, myproperty
содержит единственную подстрокуsubstring1
, как так:
g.V(993280096)
.filter({it.get().value("myproperty").contains("substring1")})
Как я могу расширить это для поиска нескольких подстрок в одном запросе?
Что-то вроде:
g.V(993280096)
.filter({ it.get().value("myproperty")
.contains(or("substring1", "substring2"))})
И есть ли лучший способ сделать это вместо лямбда-выражений? Обратите внимание, что я не хочу использовать встроенные функции базы данных графов (в моем случае JanusGraph), потому что я использую gremlin-python.
2 ответа
Решение
Вы можете использовать новые предикаты текстового фильтра. На современном образце графика вы можете сделать это, например:
gremlin> TinkerFactory.createModern().traversal().V().
has("name", containing("ark").or(containing("os"))).values("name")
==>marko
==>josh
Сразу после публикации я нашел решение (хотя я не знаю, лучший ли это способ), используя matches
вместо того contains
:
g.V(993280096)
.filter({ it.get().value("myproperty").matches(".* substring1.*|.* substring2.*")})