【发布时间】:2018-01-02 17:08:27
【问题描述】:
我正在使用 Azure cosmos Db,在 cosmosDB 中我有很多顶点,每个顶点都有键值形式的属性。我想找到任何检查以任何字符开头的顶点值的 gremlin 查询。 过滤器查询存在,但不支持天蓝色过滤器查询,那么是否有任何其他 Gremlin 查询采用以任何字符开头的顶点属性值?
【问题讨论】:
标签: azure-cosmosdb gremlin tinkerpop
我正在使用 Azure cosmos Db,在 cosmosDB 中我有很多顶点,每个顶点都有键值形式的属性。我想找到任何检查以任何字符开头的顶点值的 gremlin 查询。 过滤器查询存在,但不支持天蓝色过滤器查询,那么是否有任何其他 Gremlin 查询采用以任何字符开头的顶点属性值?
【问题讨论】:
标签: azure-cosmosdb gremlin tinkerpop
虽然我自己从未尝试过 CosmosDB,但我不得不不同意 John 的观点。根据 CosmosDB 的文档,对任何属性的任何范围查询都是从索引处理的。因此,如果您想查找所有具有以a 开头的name 属性的person 顶点,您可以这样做:
g.V().has("person", "name", between("a", "b"))`
TinkerPop 玩具图的具体示例:
gremlin> g = TinkerFactory.createModern().traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> g.V().has("name", between("m", "n")).valueMap()
==>[name:[marko], age:[29]]
gremlin> g.V().has("name", between("j", "k")).valueMap()
==>[name:[josh], age:[32]]
gremlin> g.V().has("name", between("j", "n")).valueMap()
==>[name:[marko], age:[29]]
==>[name:[lop], lang:[java]]
==>[name:[josh], age:[32]]
【讨论】:
a之后的字母。
marko 以m 开头,josh 以j 开头。
“以任何字符开头”需要全文搜索,但 Cosmos DB 的文档 https://docs.microsoft.com/en-us/azure/cosmos-db/gremlin-support#gremlin-steps 不支持它。
JanusGraph 支持全文搜索或字符串搜索,例如:
g.V().has('bookname', textPrefix('uni'))
更多信息请参考http://docs.janusgraph.org/latest/index-parameters.html#text-search
【讨论】:
graph.traversal().V().has('bookname', sw('uni')) 支持开头为、结尾为、包含、包含任何、包含所有、通配符和模糊。 (我是 Data Hub 团队的开发人员。)