拼音字母搜索功能
使用的gem:
https://github.com/huacnlee/redis-search
使用方法
配置文件路径: config/initializers/redis_search.rb
# -*- coding: utf-8 -*-
require "redis"
require "redis-namespace"
require "redis-search"
begin
redis = Redis.new(:host => "127.0.0.1",:port => "6379")
redis.select(3)
redis = Redis::Namespace.new("you_app_name:redis_search", :redis => redis)
Redis::Search.configure do |config|
config.redis = redis
config.complete_max_length = 100
config.pinyin_match = true
# 是否关闭中文分词,true为关闭,可节省内存占用
config.disable_rmmseg = true
end
rescue
p "redis server not running"
end
为模块做索引
class User < ActiveRecord::Base
include Redis::Search
def hits
# 计算权重
end
redis_search_index(:title_field => :name, #主要索引域
:alias_field => :login, #次要的索引域
:score_field => :hits, #传入一个方法名,根据方法返回值来确定权重
:prefix_index_enable => true, #逐字索引,逐字搜索时开启
:condition_fields => [:role], #条件,传入的是一组字段,搜索时可以以
:conditions => {:role => :admin}) 的方法使用。
:ext_fields => [:email, :created_at]) #其余需要索引的域
end
# 重新build索引
rake redis_search:index
搜索
# 逐字搜索
Redis::Search.complete("User", params[:query], :conditions => {:role => :admin})
# 全文搜索
Redis::Search.query("User", params[:query], :conditions => {:role => :admin})