Redis-Search
High performance real-time prefix search, indexes store in Redis for Rails application.
中文介绍和使用说明
Master Status
Features
- 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
Requirements
Install
gem 'redis-search'
$ bundle install
Configure
- Create file in: config/initializers/redis-search.rb
require "redis"
require "redis-namespace"
require "redis-search"
redis = Redis.new(host: '127.0.0.1', port: '6379')
redis.select(3)
redis = Redis::Namespace.new("your_app_name:redis_search", redis: redis)
Redis::Search.configure do |config|
config.redis = redis
config.complete_max_length = 100
config.pinyin_match = true
end
Usage
- 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
self.category.name
end
end
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]
end
class SearchController < ApplicationController
def search_users
Post.prefix_match(params[:q], conditions: { user_id: 12, category_id: 4 })
end
end
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
Documentation
Benchmark test
You can run the rake command (see Rakefile) to make test.
There is my performance test result.
Demo
Projects used redis-search:
License