> For the complete documentation index, see [llms.txt](https://docs.navigaglobal.com/live-content-cloud/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.navigaglobal.com/live-content-cloud/services/query-streamer/architecture.md).

# Architecture

### Components

QS consists of the following parts:

* ElasticSearch
* Nodejs API
  * One CRUD API for handling client streams
  * One notify API for injecting events (from OC's notifier)
* Multicaster Lambda

#### Elastic Search

The main reason we use Elastic Search is because of its [percolator feature](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-percolate.html). The percolator is sort of an "inverse database" in which you **store** quries and **perculate** documents to find all stored quires that that matches a specific document. For each stream that is created, a query is stored in the percolator together with two data objects, destination and meta.

The destination object describes how QS should publish the notification when a document matches the query.

For all supported destination types, go to the section below on the Notify API.&#x20;

The Meta field can hold any meta data.
