java - Gremlin 不区分大小写的搜索
问题描述
我是 Gremlin 的新手,我正在使用 Gremlin 控制台从图形数据库中读取数据。在图中,有标签为“设备”的顶点。这些顶点有一个与之关联的属性“名称”。我需要找出是否有一个具有特定名称的顶点。此检查必须不区分大小写。
假设我要在关系数据库中执行此操作,我可以编写以下查询:
SELECT * FROM device d WHERE LOWER(d.name) = 'mydevice'
我正在 Gremlin 中寻找类似于“LOWER”的功能。如果没有这样的功能,有人可以告诉我如何在不考虑字母大小写的情况下搜索顶点的属性吗?
谢谢你。
解决方案
正式地,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 选项之上还有一个富文本搜索系统。因此,如果您明确需要您描述的搜索类型,您可能需要查看各个图形系统提供的选项。
虽然出于多种原因不建议您使用 lambda:
gremlin> g.V().filter{it.get().value('name').toUpperCase() == 'MARKO'}.values('name')
==>marko
lambdas 的缺点是:
- 并非所有提供商都支持它们,因此您的代码可移植性会降低
- 他们强制以比严格使用 Gremlin 步骤的遍历更昂贵的方式评估请求。
TinkerPop 正在慢慢识别不同供应商提供的搜索选项之间的共性,并将在机会出现时继续推广这些功能,以便它们可以作为 Gremlin 语言本身的一等公民使用。
推荐阅读
- python - 我在使用 Flask Python 读取 CSS 文件时遇到问题
- audio - 关于连接视频ffmpeg的问题
- typescript - “从不”类型上不存在属性。在一个函数中
- python-3.x - 我可以在 DRF 中创建一个令牌池吗
- flutter - Flutter ListTile onTap 函数不会重定向到新页面
- flutter - 在颤振中使用 SliverList 的 SliverChildBuilderDelegate 时索引来自哪里
- c# - 抑制触发的 Blazor 输入事件
- c++ - 优化循环以获得更好的性能
- image-recognition - Yolov3的显卡内存可以通过使用质量较低的图像来减少吗?
- html - HTML 选框问题