Azure Cosmos DB Graph通配符搜索

时间:2017-07-01 18:34:55

标签: azure-cosmosdb gremlin

是否可以使用Azure Cosmos Graph DB中的包含搜索顶点属性?

例如,我想找到名字中有'Jr'的所有人?

g.V().hasLabel('person').has('name',within('Jr')).values('name')

似乎within('')函数仅过滤与'Jr'完全相等的值。我正在寻找一个包含。 理想情况下不区分大小写。

2 个答案:

答案 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(字符串)

     

传入的字符串是否不包含提供的字符串?