Searchkit is a TypeScript monorepo that provides a library and server-side API to bridge Algolia's InstantSearch UI components with Elasticsearch. It transforms InstantSearch search parameters into Elasticsearch queries, executes them via a configurable transporter (supporting API keys, basic auth, cloud_id, custom headers), and transforms responses back into InstantSearch-compatible format. The core package (`searchkit`) handles request/response transformation, query rules (conditions and actions like pin, boost, rewrite), facets (string, numeric, date, nested, geo), filters, sorting (with nested fields and array modes), highlighting/snippets (with wildcard and nested path support), and KNN/hybrid search. The `@searchkit/api` package provides a Node.js client factory for building search endpoints, and `@searchkit/instantsearch-client` offers a browser-side adapter that can connect either to a Searchkit API endpoint or directly to Elasticsearch. The monorepo also includes an analytics plugin for Elasticsearch Behavioral Analytics, extensive functional tests using nock snapshots, sample datasets, and integration examples for Next.js, Express, Cloudflare Workers, Vue, and plain JavaScript. The architecture is config-driven, with a `SearchkitConfig` object defining connection, search settings, facets, filters, sorting, and query rules, plus hooks for customizing queries and responses.
Meilisearch is a high-performance search engine written in Rust, organized as a workspace of crates. The core `milli` crate implements indexing, ranking, faceting, filtering, and vector search; the `meilisearch` crate exposes an HTTP API via actix-web. It supports typo-tolerant full-text search, facet filters, geo search, hybrid keyword/vector search, and federated search across remote instances. The system persists data in LMDB and provides dump/restore with backward-compatible readers for multiple dump versions. Beyond search, the repository contains data-intensive components: an indexing pipeline with incremental updates, facet tree structures, embedding generation with multiple providers (OpenAI, HuggingFace, Ollama, REST), and a task scheduler for asynchronous batch operations. Experimental features include chat completions, personalization, and dynamic search rules. The codebase is primarily an application, but includes research-grade algorithms for tokenization, typo tolerance, and vector similarity. Maintenance risks include dual indexing pipelines (old and new update paths), many experimental feature flags, and vendored external crates. The code is generally well-structured with reusable crates for dump handling, filter parsing, and HTTP client utilities.
Typesense is a high-performance, open-source search engine written in C++17, designed as a drop-in alternative to Algolia and Elasticsearch. It provides a RESTful HTTP API for full-text search, faceted navigation, geospatial filtering, vector search (with HNSW), and hybrid (semantic + keyword) search. The architecture is a distributed, Raft-based clustered system with leader election, log replication, and snapshotting, ensuring high availability and consistency. The server integrates with external AI providers (OpenAI, Google, Azure, Cloudflare) for embedding generation and natural language query processing, and supports on-device ONNX models for text, image, and voice search. The codebase is modular, with singleton managers for collections, embeddings, analytics, rate limiting, and authentication, all built on top of a RocksDB-backed key-value store. Extensive test coverage includes C++ unit tests (gtest), TypeScript integration tests (Bun), and benchmark infrastructure (k6, InfluxDB). While primarily an application, it incorporates data-intensive features like statistical sketches (TDigest, CountMinSketch), custom indexing data structures (ART, numeric trie, hat-trie), and analytics pipelines, giving it a hybrid character.