我是Gremlin的新手,正在使用Gremlin控制台从图形数据库中读取数据。在图形中,存在带有标签“设备”的顶点。这些顶点具有与之关联的属性“名称”。我需要找出是否有一个具有特定名称的顶点。此检查必须不区分大小写。

假设我要在关系数据库中执行此操作,可以编写以下查询:

SELECT * FROM device d WHERE LOWER(d.name) = 'mydevice'


我在寻找与Gremlin中的'LOWER'类似的功能。如果没有该功能,有人可以告诉我如何在不考虑字母大小写的情况下搜索顶点的属性吗?

谢谢。

最佳答案

正式地,Gremlin目前只有三个文本predicates,由TextP公开:startingWithendingWithcontaining(以及它们的取反),但是它们的默认实现区分大小写:

gremlin> g.V().has('person','name',containing('ark')).values('name')
==>marko
gremlin> g.V().has('person','name',containing('Ark')).values('name')
gremlin>


根据您使用的启用了TinkerPop的图形数据库,您可能会具有这种功能以及其他更高级的搜索选项(例如regex)。例如,JanusGraph支持全文搜索(不区分大小写)以及许多other options。 DS Graph在基本的Gremlin选项上也有一个rich text search system。因此,如果您对描述的搜索类型有明确的需求,则可能需要研究各个图形系统提供的选项。

尽管出于多种原因不建议您使用lambda:

gremlin> g.V().filter{it.get().value('name').toUpperCase() == 'MARKO'}.values('name')
==>marko


Lambda的缺点是:


并非所有提供商都支持它们,因此降低了代码的可移植性
与强制使用Gremlin步骤的遍历相比,它们迫使请求的评估成本更高。


TinkerPop正在缓慢地识别不同供应商提供的搜索选项之间的共性,并将在机会出现时继续推广这些功能,以便使它们成为Gremlin语言本身的一等公民。

关于java - Gremlin不区分大小写的搜索,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58102960/

10-13 02:11