Gremlin 不区分大小写的搜索
Gremlin case insensitive search
我是 Gremlin 的新手,我正在使用 Gremlin 控制台从图形数据库读取数据。在图中,有标签为 "Device" 的顶点。这些顶点有一个 属性 "name" 与之关联。我需要找出是否有一个具有特定名称的顶点。此检查必须不区分大小写。
假设我要在关系数据库中执行此操作,我可以编写以下查询:
SELECT * FROM device d WHERE LOWER(d.name) = 'mydevice'
我正在 Gremlin 中搜索类似于 'LOWER' 的函数。如果没有相应的函数,有人可以告诉我如何在不考虑字母大小写的情况下搜索顶点的属性吗?
谢谢。
根据官方说法,目前 Gremlin 目前只有三个文本 predicates,正如 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 支持不区分大小写的全文搜索以及在基本 Gremlin 选项之上的大量 other options. DS Graph also has a rich text search system。因此,如果您明确需要您描述的搜索类型,您可能需要查看各个图形系统提供的选项。
虽然出于多种原因不推荐使用 lambda:
gremlin> g.V().filter{it.get().value('name').toUpperCase() == 'MARKO'}.values('name')
==>marko
lambda 的缺点是:
- 并非所有提供商都支持它们,因此您的代码可移植性会降低
- 他们强制以一种比严格使用 Gremlin 步骤的遍历成本更高的方式评估请求。
TinkerPop 正在慢慢识别不同供应商提供的搜索选项之间的共性,并将在机会出现时继续推广这些功能,以便它们成为 Gremlin 语言本身的第一个 class 公民。
我是 Gremlin 的新手,我正在使用 Gremlin 控制台从图形数据库读取数据。在图中,有标签为 "Device" 的顶点。这些顶点有一个 属性 "name" 与之关联。我需要找出是否有一个具有特定名称的顶点。此检查必须不区分大小写。
假设我要在关系数据库中执行此操作,我可以编写以下查询:
SELECT * FROM device d WHERE LOWER(d.name) = 'mydevice'
我正在 Gremlin 中搜索类似于 'LOWER' 的函数。如果没有相应的函数,有人可以告诉我如何在不考虑字母大小写的情况下搜索顶点的属性吗?
谢谢。
根据官方说法,目前 Gremlin 目前只有三个文本 predicates,正如 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 支持不区分大小写的全文搜索以及在基本 Gremlin 选项之上的大量 other options. DS Graph also has a rich text search system。因此,如果您明确需要您描述的搜索类型,您可能需要查看各个图形系统提供的选项。
虽然出于多种原因不推荐使用 lambda:
gremlin> g.V().filter{it.get().value('name').toUpperCase() == 'MARKO'}.values('name')
==>marko
lambda 的缺点是:
- 并非所有提供商都支持它们,因此您的代码可移植性会降低
- 他们强制以一种比严格使用 Gremlin 步骤的遍历成本更高的方式评估请求。
TinkerPop 正在慢慢识别不同供应商提供的搜索选项之间的共性,并将在机会出现时继续推广这些功能,以便它们成为 Gremlin 语言本身的第一个 class 公民。