Skip to content
This repository has been archived by the owner. It is now read-only.
Deprecated! High performance real-time prefix search, indexes store in Redis for Rails application
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
lib keys.each -> each_key Nov 24, 2016
spec Bugfix/20160726 indexing task error (#54) Jul 26, 2016
.gitignore update readme Oct 8, 2014
.rspec Add travis support Oct 14, 2011
.travis.yml Update Gems May 6, 2016 version 1.0.3 Jul 26, 2016
Gemfile.lock version 1.0.3 Jul 26, 2016
LICENSE Add License Dec 30, 2013 Update Jan 11, 2017
Rakefile Remove Segment words search feature. May 9, 2016
redis-search.gemspec Update gem description [skip ci] May 9, 2016

Redis-Search (Deprecated! 不在维护!)

High performance real-time prefix search, indexes store in Redis for Rails application. 中文介绍和使用说明


There have more better ways you can choice!


Master Status

Gem Version CI Status CodeCov


  • Real-time search
  • High performance
  • Prefix match search
  • Support match with alias
  • Support ActiveRecord and Mongoid
  • Sort results by one field
  • Homophone search, pinyin search
  • Search as pinyin first chars
  • Conditions support


  • Redis 2.2+


gem 'redis-search'
$ bundle install


  • Create file in: config/initializers/redis-search.rb
require "redis"
require "redis-namespace"
require "redis-search"

# don't forget change namespace
redis = '', port: '6379')
# We suggest you use a special db in Redis, when you need to clear all data, you can use `flushdb` command to cleanup.
# Give a special namespace as prefix for Redis key, when your have more than one project used redis-search, this config will make them work fine.
redis ="your_app_name:redis_search", redis: redis)
Redis::Search.configure do |config|
  config.redis = redis
  config.complete_max_length = 100
  config.pinyin_match = true


  • Bind Redis::Search callback event, it will to rebuild search indices when data create or update.
class Post < ActiveRecord::Base
  include Redis::Search

  belongs_to :user
  belongs_to :category

  redis_search title_field: :title,
               score_field: :hits,
               condition_fields: [:user_id, :category_id],
               ext_fields: [:category_name]

  def category_name
class User < ActiveRecord::Base
  include Redis::Search

  serialize :alias_names, Array

  redis_search title_field: :name,
               alias_field: :alias_names,
               score_field: :followers_count,
               ext_fields: [:email, :tagline]
class SearchController < ApplicationController
  # GET /search_users?q=j
  def search_users
    Post.prefix_match(params[:q], conditions: { user_id: 12, category_id: 4 })

Index data to Redis

Specify Model

Redis-Search index data to Redis from your model (pass name as CLASS environment variable).

$ rake redis_search:index:model CLASS='User'

Customize the batch size:

$ rake redis_search:index:model CLASS='User' BATCH=100

All Models

Redis-Search all index data to Redis from app/models (or use DIR environment variabl).

$ rake redis_search:index DIR=app/models

Customize the batch size:

$ rake redis_search:index DIR=app/models BATCH=100


Benchmark test

You can run the rake command (see Rakefile) to make test. There is my performance test result.


Projects used redis-search:


  • MIT
You can’t perform that action at this time.