gpt4 book ai didi

java - Gremlin 不区分大小写的搜索

转载 作者:行者123 更新时间:2023-12-02 00:13:55 26 4
gpt4 key购买 nike

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

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

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 的图形数据库,您可能可以使用此类功能以及其他更高级的搜索选项(例如正则表达式)。例如,JanusGraph 支持不区分大小写的全文搜索以及大量 other options 。 DS Graph 还有一个rich text search system在基本 Gremlin 选项之上。因此,如果您对所描述的搜索类型有明确的需求,您可能需要研究各个图形系统提供的选项。

虽然出于多种原因不建议您使用 lambda:

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

lambda 的缺点是:

  1. 并非所有提供商都支持它们,因此您的代码可移植性会降低
  2. 它们强制以比严格使用 Gremlin 步骤的遍历成本更高的方式评估请求。

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

更新:从 TinkerPop 3.6.0 开始,Gremlin 现在有一个 TextP.regex 谓词,可以帮助执行以下类型的搜索:

gremlin> g.V().has('name', TextP.regex('[M|m].*o')).elementMap()
==>[id:1,label:person,name:marko,age:29]
gremlin> g.V().has('name', TextP.regex('(?i)M.*O')).elementMap()
==>[id:1,label:person,name:marko,age:29]

请注意,(?i) 启用 Java 的 Pattern.CASE_INSENSITIVE 模式匹配模式。

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com