Curiosity for Developers
  • Overview
  • Getting Started
    • Introduction
    • System Overview
      • Workspace
      • Connectors
      • Front End
    • Requirements
    • Installation
      • Deploying on Windows
        • Download Curiosity Workspace for Windows
      • Deploying on Docker
        • Deploying using Docker Desktop App
        • Docker Hub
      • Deploying on Kubernetes
      • Deploying on OpenShift
      • Configuration
    • Configure your Workspace
    • Connecting to a Workspace
      • Download App
    • Built-in Templates
  • Security
    • Introduction
    • Hosting
    • Encryption
    • Users and Access
      • User Invitations
      • Single Sign-On (SSO)
        • Google Sign-In
        • Microsoft / Azure AD
        • Okta
        • Auth0
    • Permissions Management
    • Auditing
    • Teams management
    • Configuring Backup
      • Restoring a backup
    • Activate a workspace license
  • Data Sources
    • Introduction
    • User Apps
    • Workspace Integrations
    • API Integrations
      • Introduction
      • Data Modeling
      • Writing a Connector
      • Access Control
      • API Tokens
      • API Overview
      • Tips
    • Supported File Types
    • Curiosity CLI
      • Installation
      • Authentication
      • Commands
  • Search
    • Introduction
    • Languages
    • Synonyms
    • Ranking
    • Filters
    • Search Permissions and Access Control
  • Endpoints
    • Introduction
    • Creating an endpoint
    • Calling an endpoint
    • Endpoint Tokens
    • Endpoints API
  • Interfaces
    • Introduction
    • Local Development
    • Deploying a new interface
    • Routing
    • Node Renderers
    • Sidebar
    • Views
  • Artificial Intelligence
    • Introduction
    • Embeddings Search
    • AI Assistant
      • Enabling AI Assistant
    • Large Language Models
      • LLMs Models Configuration
      • Self-Hosted Models
    • Image Search
    • Audio and Video Search
  • Sample Workspaces
    • Introduction
    • HackerNews
    • Aviation Incidents
    • Covid Papers
    • NASA Public Library
    • Suggest a Recipe
  • Basic Concepts
    • Graph database
    • Search Engine
  • Troubleshooting
    • FAQs
      • How long does it take to set up?
      • How does Curiosity keep my data safe?
      • Can we get Curiosity on-premises?
      • Can I connect custom data?
      • How does Workspace pricing work?
      • Which LLM does Curiosity use?
      • What's special about Curiosity?
      • How are access permissions handled?
      • What enterprise tools can I connect?
      • How to access a workspace?
      • How do I hard refresh my browser?
      • How do I report bugs?
      • How do I solve connectivity issues?
      • How do I contact support?
  • Policies
    • Terms of Service
    • Privacy Policy
Powered by GitBook
On this page
  • Knowledge Graph
  • Data Modelling
  • Schemas
  • Graph Schema
  • Internal Node Schemas
  1. Basic Concepts

Graph database

PreviousSuggest a RecipeNextSearch Engine

Last updated 10 months ago

Knowledge Graph

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 Modelling

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).

https://curiosity.slite.com/api/files/s7fwJk1FC/image.png

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.

Schemas

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.

Graph Schema

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.

Internal Node Schemas

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.