是否可以使用Azure Cosmos Graph DB中的包含搜索顶点属性?
例如,我想找到名字中有'Jr'
的所有人?
g.V().hasLabel('person').has('name',within('Jr')).values('name')
似乎within('')
函数仅过滤与'Jr'
完全相等的值。我正在寻找一个包含。 理想情况下不区分大小写。
答案 0 :(得分:3)
目前没有任何文本匹配功能可供CosmosDB使用。但是,通过使用使用Javascript match()函数的UDF(用户定义函数),我能够实现通配符搜索功能:
function userDefinedFunction(input, pattern) { return input.match(pattern) !== null; };
然后您必须将查询编写为SQL并使用您定义的UDF(下面的示例假设您调用了函数' REGEX'
SELECT * FROM c where(udf.REGEX(c.name[0]._value, '.*Jr.*') and c.label='person')
性能将远非理想,因此您需要根据延迟和成本观点来决定解决方案是否可接受。
答案 1 :(得分:1)
Azure团队现已实施Tinkerpop predicates for String
Azure团队已在其反馈网站上将其“宣布”给a user here。
我还没有测试所有内容,但是包含对我有用的作品(尽管它区分大小写)
g.V().hasLabel('doc').or(__.has('title', containing('truc')), __.has('tags', containing('truc')))
TextP.startingWith(string)
传入的字符串是否以提供的字符串开头?
TextP.endingWith(string)
传入的字符串是否以提供的字符串结尾?
TextP。contains(string)
传入的字符串是否包含提供的字符串?
TextP.notStartingWith(string)
传入的字符串是否不以提供的字符串开头?
TextP.notEndingWith(string)
传入的字符串是否不以提供的字符串结尾?
TextP.notContaining(字符串)
传入的字符串是否不包含提供的字符串?