Graph database
Last updated
Last updated
Curiosity is built on top of a custom graph-database technology. This is a tailored-made graph database engine that has been designed from the ground-up for the enterprise search use-case, and powers much of the functionality of the system.
Data in a graph database is represented as a set of Nodes and Edges. Nodes are actual data-points and represent things like documents, persons or concepts. In a Curiosity graph, all nodes are strongly-typed - i.e. they have a pre-defined type and fixed schema - imagine it as each entry on a typical SQL table. Edges represent the relationship between different nodes. Similarly to nodes, edges are also strongly-typed, and have a direction (i.e. they go from a node to another node).
One edge always connects exactly two nodes in a single direction. To connect them in both directions, you need to add edges from each node to each other. Nodes can have multiple edges to any other node, but edges to itself are not allowed. Edges can also store information using fields.
Nodes and edges can have fields that describe data attributes, e.g. Harry
could have properties like Age
and Height
. Fields are used to store information about nodes and edges.
It is mandatory for a Node to have at least one string field (i.e. the Key of the node). This field will uniquely identify the pair (Node Type + Key) in the graph database.
Edges have a unique type and don't store any properties. It is possible to have repeated edges of the same type between two nodes, so when adding relationships, you have to decide if you would like to add the edge and enforce uniqueness. Refer to our connector documentation for more information.
The graph schema is the structure that the you define for your graph. It specifies:
Which nodes types and edge types exist in the graph
Which fields are associated with each node type
The fact that the schema defines node fields means that all nodes of the same type share the same field types, e.g. each node of type Person
has the field Name
and Age
, although the values of each field will usually differ between nodes. As Curiosity uses a strongly-typed graph, you must define your schemas before using them.
Out of the box, the Curiosity app has a few built-in schemas that are used to provide the out-of-the-box support functionality. A protected Node Type can be identified by the leading underscore in the schema name (such as _FileEntry
for representing files, or _User
for users).
Internal schemas cannot be changed nor deleted, but can be hidden from the default search if needed.