finds.dev← search

// the find

ankane/searchkick

★ 6,718 · Ruby · MIT · updated Jun 2026

Intelligent search made easy

Searchkick wraps Elasticsearch and OpenSearch with a Rails-friendly API that makes full-text search feel like ActiveRecord. It handles index management, zero-downtime reindexing, synonym management, autocomplete, and conversion-based learning out of the box. The target audience is Rails shops that want serious search without writing Elasticsearch DSL.

The zero-downtime reindex strategy — create a new index, swap the alias atomically — is implemented correctly and transparently, which is something most teams get wrong the first time they do it themselves. Conversion tracking via Searchjoy is genuinely useful: it feeds real user click data back into ranking rather than just relying on static field weights. The misspellings fallback (search clean first, retry with fuzz only if results are thin) is a smart default that avoids the recall/precision tradeoff most teams botch. Test support is well thought out — per-worker index suffixes for parallel test runs, explicit callback enable/disable around test cases, and real ES/OpenSearch via GitHub Actions setup actions.

The intelligent search (conversion learning) requires Searchjoy, a separate gem with its own schema, and a cron job to keep conversion counts fresh — the README buries this complexity but it's a real operational dependency. Synonym changes still require a full reindex in the static case; the dynamic synonym file workaround requires direct filesystem access to the search server, which is unavailable on managed services like Elastic Cloud. Association sync is entirely manual: a product update doesn't propagate to nested documents, and the README's suggested `after_commit` callback is a naive approach that will double-fire on retries. The `body_options` escape hatch for unsupported aggregation types is a signal that the abstraction layer is thinner than it looks — complex queries will push you into raw DSL anyway.

View on GitHub →

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →