SeaSearch is a multi-tenant search engine with full-text indexing and vector indexing. Elasticsearch-compatible and S3-backed.
22
stars
631
commits
Go
primary language
Sep 15, 2026
updated
SeaSearch is a lightweight, Go-based multi-tenant search engine featuring Elasticsearch API compatibility and S3-backed storage—designed to support unlimited indexes without overhead.
In a multi-tenant environment, such as a SaaS application, this allows each tenant's data to be indexed independently. With traditional search engines such as Elasticsearch, when all tenants' data is stored in a single index, the index may eventually become too large and require manual sharding. With SeaSearch, each tenant can have its own index, making it easier to manage and scale large numbers of tenants.
SeaSearch uses a shared-storage architecture.
A SeaSearch cluster consists of the following types of nodes:
In a single-node deployment, SeaSearch uses a local KV database (bbolt) to store index metadata and the local file system to store index data.
Because all compute nodes share the same storage backend, SeaSearch only needs to distribute index ownership among nodes rather than moving or replicating the actual index data.
Because updating the cluster configuration does not require transferring large amounts of data, SeaSearch can efficiently manage a large number of indexes.
When handling requests, compute nodes may need to retrieve index data from S3 storage, which can introduce additional latency. To reduce this latency, SeaSearch compute nodes cache index data on their local disks.
This caching strategy is feasible because index data is organized into immutable segments. Once created, an index segment can only be read or deleted; its contents are never modified.
To support queries against indexes that are larger than the available local disk space, compute nodes use a rotating cache. When a new segment needs to be cached and the cache has reached its size limit, older segments are evicted to make room.
With this design, clients typically experience higher latency only for the first request after an index segment has been evicted or when a node starts up. Once the cache is warmed up, subsequent requests can be served at speeds comparable to those of local storage.
In our experience, the warm-up latency can be further reduced by taking advantage of the high network bandwidth available in modern data centers. During the warm-up stage, multiple index segments can be retrieved from S3 in parallel, significantly accelerating index loading.
Distributed Query Execution: To further improve the ability to serve queries against very large indexes, SeaSearch can automatically distribute a search query across multiple compute nodes. Each node loads and searches a portion of the index data in parallel, and the results are then aggregated. This approach not only accelerates query execution but also reduces cache pressure on individual nodes, allowing SeaSearch to efficiently serve indexes that are significantly larger than the local disk capacity of a single node.
(top 30 of 52)
Go
99.9%
SeaSearch is a multi-tenant search engine with full-text indexing and vector indexing. Elasticsearch-compatible and S3-backed.
22
stars
631
commits
Go
primary language
Sep 15, 2026
updated
SeaSearch is a lightweight, Go-based multi-tenant search engine featuring Elasticsearch API compatibility and S3-backed storage—designed to support unlimited indexes without overhead.
In a multi-tenant environment, such as a SaaS application, this allows each tenant's data to be indexed independently. With traditional search engines such as Elasticsearch, when all tenants' data is stored in a single index, the index may eventually become too large and require manual sharding. With SeaSearch, each tenant can have its own index, making it easier to manage and scale large numbers of tenants.
SeaSearch uses a shared-storage architecture.
A SeaSearch cluster consists of the following types of nodes:
In a single-node deployment, SeaSearch uses a local KV database (bbolt) to store index metadata and the local file system to store index data.
Because all compute nodes share the same storage backend, SeaSearch only needs to distribute index ownership among nodes rather than moving or replicating the actual index data.
Because updating the cluster configuration does not require transferring large amounts of data, SeaSearch can efficiently manage a large number of indexes.
When handling requests, compute nodes may need to retrieve index data from S3 storage, which can introduce additional latency. To reduce this latency, SeaSearch compute nodes cache index data on their local disks.
This caching strategy is feasible because index data is organized into immutable segments. Once created, an index segment can only be read or deleted; its contents are never modified.
To support queries against indexes that are larger than the available local disk space, compute nodes use a rotating cache. When a new segment needs to be cached and the cache has reached its size limit, older segments are evicted to make room.
With this design, clients typically experience higher latency only for the first request after an index segment has been evicted or when a node starts up. Once the cache is warmed up, subsequent requests can be served at speeds comparable to those of local storage.
In our experience, the warm-up latency can be further reduced by taking advantage of the high network bandwidth available in modern data centers. During the warm-up stage, multiple index segments can be retrieved from S3 in parallel, significantly accelerating index loading.
Distributed Query Execution: To further improve the ability to serve queries against very large indexes, SeaSearch can automatically distribute a search query across multiple compute nodes. Each node loads and searches a portion of the index data in parallel, and the results are then aggregated. This approach not only accelerates query execution but also reduces cache pressure on individual nodes, allowing SeaSearch to efficiently serve indexes that are significantly larger than the local disk capacity of a single node.
(top 30 of 52)
Go
99.9%