【问题标题】:Tinkerpop Stack Rexster REST API _propertiesTinkerpop Stack Rexster REST API _properties
【发布时间】:2016-03-09 13:32:44
【问题描述】:

技术栈

  • Tinkerpop Stack 2.4(Rexster HTTP REST 服务器)
  • 泰坦 0.5.4
  • DynamoDB (AWS)
  • NodeJS

目标

我想利用基于 Rexster RESTful 的 API 来查询和遍历我的图形数据库。我正在尝试了解用于基于顶点查询语法过滤结果的 _properties 查询参数。

顶点查询结果

http://localhost:8182/graphs/mygraph/vertices { "version": "2.5.0", "results": [ { "name": "Frank Stein", "_id": 25600768, "_type": "vertex" }, { "name": "John Doe", "_id": 25600512, "_type": "vertex" } ], "totalSize": 2, "queryTime": 219.86688 }

边查询结果

http://localhost:8182/graphs/mygraph/vertices

{ "version": "2.5.0", "results": [ { "_id": "f8q68-f8phc-4is5-f8pog", "_type": "edge", "_outV": 25600512, "_inV": 25600768, "_label": "friends" } ], "totalSize": 1, "queryTime": 164.384768 }

问题

这些 URI 不会返回我假设会返回的内容,总是返回一个空集。:

请求

_http://localhost:8182/graphs/privvy/vertices/25600768/both?properties=[[name,=,"John Doe"]] _http://localhost:8182/graphs/privvy/vertices/25600768/both?properties=[[name,=,John Doe]] _http://localhost:8182/graphs/privvy/vertices/25600768/both?properties=[[name,=,(s,"John Doe")]] _http://localhost:8182/graphs/privvy/vertices/25600768/both?properties=[[name,=,(s,John Doe)]]

回应

{ "version": "2.5.0", "results": [], "totalSize": 0, "queryTime": 22.641152 }

其他信息

如果我只是将 =(等于运算符)切换到 (不等于)运算符,则以下 URI 会返回一组相邻顶点的结果:

请求

_http://localhost:8182/graphs/privvy/vertices/25600768/both?properties=[[name,,"John Doe"]]

回应

{ "version": "2.5.0", "results": [ { "name": "John Doe", "_id": 25600512, "_type": "vertex" } ], "totalSize": 1, "queryTime": 17.451008 }

有人知道我哪里出错了吗?

参考文献

感谢朋友们!

汤姆

【问题讨论】:

    标签: rest titan gremlin tinkerpop tinkerpop-blueprint


    【解决方案1】:

    在您提供的链接中,明确注意此部分:

    https://github.com/tinkerpop/blueprints/wiki/Vertex-Query#query-use-cases

    请注意,所有用例都涉及“边缘”。您正在尝试对边的相邻顶点上的属性值进行顶点查询。如果您希望查询以这种方式工作,则必须对数据进行非规范化以在边缘包含“名称”属性。

    请注意,在我针对下面默认图表的 curl 请求中,当我针对“权重”(和边缘属性)构建顶点查询时,事情会按预期工作:

    $ curl -g "http://localhost:8182/graphs/tinkergraph/vertices/1/out?_properties=[[weight,=,(f,0.4)]]"
    {"version":"2.5.0","results":[{"name":"lop","lang":"java","_id":"3","_type":"vertex"}],"totalSize":1,"queryTime":1.070072}
    

    【讨论】:

    • 感谢您提供此信息。根据您所指出的,顶点查询的用例可能基于边遍历和过滤是有道理的,但是,我发现很难相信我需要将顶点的属性反规范化为边来完成我正在努力实现的目标。完全违背 DB/Graph 系统的目的。我需要找到一种方法来过滤对顶点属性的查询,也许我需要研究这个技术堆栈的顶点键。
    • 除非你的图有一些规范,每个顶点有数百万条边,否则可能不需要考虑非规范化。您可以使用 Gremlin 轻松地以您在问题中描述的方式(即通过顶点属性)进行过滤,但您无法使用 Rexster 公开的标准 REST API 进行过滤。所以,如果你需要这样做,我会使用 Rexster 的 Gremlin Extension。顺便说一句,请注意 Rexter 不再处于开发阶段 - 如果您刚刚开始,请参阅 Gremlin Server for TinkerPop 3:tinkerpop.apache.org/docs/3.1.0-incubating/#gremlin-server
    • 现在,您可以将 TP3 和 Titan 1.0.0 与 DynamoDB 一起使用:github.com/awslabs/dynamodb-titan-storage-backend
    猜你喜欢
    • 1970-01-01
    • 2016-11-05
    • 1970-01-01
    • 2014-10-05
    • 1970-01-01
    • 2015-02-15
    • 1970-01-01
    • 2014-06-10
    • 1970-01-01
    相关资源
    最近更新 更多