NeoFind Command

NeoFind is one of two supported commands for the experimental Neo4J based scale-out VDMS.

It combines the various "Find" commands from PMGD based VDMS into a single unified command for retrieval of metadata and data from VDMS.

Parameters

  • target_data_type: Currently this supports images (img) and metadata (md_only). If an image is specified, an associated blob must be uploaded with it.
  • [optional] target_format: Specifies the targeted file format for uploaded images, e.g. jpg
  • cypher: Specially formatted cypher is used to specify the metadata to be either uploaded or retrieved. See below for more details.

Blocks

Cypher

The cypher field, which exposes raw-cypher graph query language to the client. While this makes the call a bit more complicated, it removes the need for complex query daisy chaining using the _ref field in the existing API. Note this assumes a basic knowledge of the cypher GQL, see tutorials here, though you can copy-paste-modify our examples here to play around.

There are a couple rules that should be followed to ensure VDMS does what its supposed to for each call.

The primary one is that the primary query must have a variable named VDMSNODE that refers to the nodes being created or retrieved. This is so the VDMS server can append system metadata to the relevant graph nodes, such as data locations and type specific labels (note that labels are roughly equivalent to PMGD classes).

For example, to match nodes with the label "cat" and return the property fur type:

MATCH (VDMSNODE:Cat) RETURN VDMSNODE.fur_type

Examples

Find and return an image and property

Here, we are looking for all images that match the label "cat", return their fur type, and crop the image

[
    {
        "NeoFind":
        {
                    "cypher": "MATCH (VDMSNODE:Cat) RETURN VDMSNODE.fur_type;",
                "target_format": "jpg",
                "target_data_type": "img",
            "operations": [
                {
                    "type": "crop",
                    "x": 0, "y": 0,
                    "width": 256, "height": 256,
                },
            ]
        }
    }
]

Metadata only query

And similar for metadata only returns

[
    {
        "NeoFind":
        {
            "cypher": "MATCH (VDMSNODE:Cat) RETURN VDMSNODE.fur_type;",
            "target_data_type": "md_only",
        }
    }
]

Here we match all nodes that link to node(s) with the tag "cat" and return them.

[
    {
        "NeoFind":
        {
            "cypher": "MATCH (tgt:Cat) -[]-(VDMSNODE) RETURN VDMSNODE",
            "target_data_type": "md_only",
        }
    }
]