Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
tree: fa4a84955b
Fetching contributors…

Cannot retrieve contributors at this time

151 lines (111 sloc) 4.045 kb

Redis-Search

High performance real-time search (Support Chinese), index in Redis for Rails application

中文介绍和使用说明

Demo

You can try the search feature in 720p.so | shu.im

And there is an Example App to show you how to use redis-search.

Master Status

CI Status

Features

  • Real-time search
  • High performance
  • Segment words search and 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

  • Redis 2.2+

Install

  1. In Rails application Gemfile

    gem 'chinese_pinyin', '0.4.1'
    gem 'rmmseg-cpp-huacnlee', '0.2.9'
    gem 'redis-search', '0.9.0'
    $ bundle install

Configure

  • Create file in: config/initializers/redis_search.rb

    require "redis"
    require "redis-namespace"
    require "redis-search"
    # don't forget change namespace
    redis = Redis.new(:host => "127.0.0.1",:port => "6379")
    # We suggest you use a special db in Redis, when you need to clear all data, you can use flushdb command to clear them.
    redis.select(3)
    # 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 = 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
      # use rmmseg, true to disable it, it can save memroy
      config.disable_rmmseg = false
    end

Usage

  • Bind Redis::Search callback event, it will to rebuild search indexes when data create or update.

    class Post
      include Mongoid::Document
      include Redis::Search
    
      field :title
      field :body
      field :hits
    
      belongs_to :user
      belongs_to :category
    
      redis_search_index(: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
      include Mongoid::Document
      include Redis::Search
    
      field :name
        field :alias_names, :type => Array
      field :tagline
      field :email
      field :followers_count
    
      redis_search_index(:title_field => :name,
                         :alias_field => :alias_names,
                         :prefix_index_enable => true,
                         :score_field => :followers_count,
                         :ext_fields => [:email,:tagline])
    end
    class SearchController < ApplicationController
      # GET /searchs?q=title
      def index
        Redis::Search.query("Post", params[:q], :conditions => {:user_id => 12})
      end
    
      # GET /search_users?q=j
      def search_users
        Redis::Search.complete("Post", params[:q], :conditions => {:user_id => 12, :category_id => 4})
      end
    end

Index data to Redis

If you are first install it in you old project, or your Redis cache lose, you can use this command to rebuild indexes.

$ rake redis_search:index

Documentation

Benchmark test

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

Jump to Line
Something went wrong with that request. Please try again.