Официально, Gremlin в настоящее время имеет только три текстовых предиката на данный момент, которые выставляются TextP
: startingWith
, endingWith
и containing
(а также их отрицаниями), но их значение по умолчаниюРеализации чувствительны к регистру:
gremlin> g.V().has('person','name',containing('ark')).values('name')
==>marko
gremlin> g.V().has('person','name',containing('Ark')).values('name')
gremlin>
В зависимости от используемой вами базы данных графиков с поддержкой TinkerPop вам могут быть доступны такие функции, а также другие более сложные параметры поиска (например, регулярное выражение).Например, JanusGraph поддерживает полнотекстовый поиск без учета регистра, а также множество других опций .В DS Graph также имеется система поиска расширенного текста поверх основных опций Gremlin.Таким образом, если у вас есть явная потребность в типе поиска, который вы описываете, вам, возможно, придется изучить опции, предоставляемые отдельными графическими системами.
Хотя это не рекомендуется по ряду причин, вы можете использовать лямбду:
gremlin> g.V().filter{it.get().value('name').toUpperCase() == 'MARKO'}.values('name')
==>marko
Недостатком лямбды является то, что:
- они не являютсяподдерживается всеми провайдерами, и, следовательно, переносимость вашего кода уменьшается
- , они заставляют запросы оцениваться способом, который может быть более дорогостоящим, чем обход, который строго использует шаги Gremlin.
TinkerPopпостепенно выявляет общие черты среди вариантов поиска, предоставляемых различными поставщиками, и будет продолжать обобщать эти функции по мере появления возможности, чтобы они были доступны в качестве первоклассных граждан на самом языке Gremlin.