redis-search 0.3.2 → 0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.markdown CHANGED
@@ -1,4 +1,4 @@
1
- # RedisSearch
1
+ # Redis-Search
2
2
 
3
3
  High performance real-time search (Support Chinese), index in Redis for Rails application
4
4
 
@@ -11,16 +11,15 @@ High performance real-time search (Support Chinese), index in Redis for Rails ap
11
11
 
12
12
  ## Requirements
13
13
 
14
- * Ruby 1.9.2
15
14
  * Redis 2.2+
16
15
 
17
16
  ## Install
18
17
 
19
18
  in Rails application Gemfile
20
19
 
21
- gem 'redis','2.1.1'
20
+ gem 'redis','>= 2.1.1'
22
21
  gem "rmmseg-cpp-huacnlee", "0.2.8"
23
- gem 'redis-search', '0.3'
22
+ gem 'redis-search', '0.4'
24
23
 
25
24
  install bundlers
26
25
 
@@ -30,22 +29,22 @@ install bundlers
30
29
 
31
30
  create file in: config/initializers/redis_search.rb
32
31
 
33
- require "redis_search"
32
+ require "redis-search"
34
33
  redis = Redis.new(:host => "127.0.0.1",:port => "6379")
35
34
  # change redis database to 3, you need use a special database for search feature.
36
35
  redis.select(3)
37
- RedisSearch.configure do |config|
36
+ Redis::Search.configure do |config|
38
37
  config.redis = redis
39
38
  config.complete_max_length = 100
40
39
  end
41
40
 
42
41
  ## Usage
43
42
 
44
- bind RedisSearch callback event, it will to rebuild search indexes when data create or update.
43
+ bind Redis::Search callback event, it will to rebuild search indexes when data create or update.
45
44
 
46
45
  class Post
47
46
  include Mongoid::Document
48
- include RedisSearch
47
+ include Redis::Search
49
48
 
50
49
  field :title
51
50
  field :body
@@ -63,7 +62,7 @@ bind RedisSearch callback event, it will to rebuild search indexes when data cre
63
62
 
64
63
  class User
65
64
  include Mongoid::Document
66
- include RedisSearch
65
+ include Redis::Search
67
66
 
68
67
  field :name
69
68
  field :tagline
@@ -77,15 +76,21 @@ bind RedisSearch callback event, it will to rebuild search indexes when data cre
77
76
  class SearchController < ApplicationController
78
77
  # GET /searchs?q=title
79
78
  def index
80
- RedisSearch::Search.query(params[:q], :type => "Post")
79
+ Redis::Search.query("Post", params[:q])
81
80
  end
82
81
 
83
82
  # GET /search_users?q=j
84
83
  def search_users
85
- RedisSearch::Search.complete(params[:q], :type => "Post")
84
+ Redis::Search.complete("Post", params[:q])
86
85
  end
87
86
  end
88
87
 
88
+ ## Index data to Redis
89
+
90
+ If you are first install it in you old project, or your Redis cache lose, you can use this command to rebuild indexes.
91
+
92
+ $ rake redis_search:index
93
+
89
94
  ## Benchmark test
90
95
 
91
96
  * [https://gist.github.com/1150933](https://gist.github.com/1150933)
@@ -0,0 +1,66 @@
1
+ # coding: utf-8
2
+ class Redis
3
+ module Search
4
+ extend ActiveSupport::Concern
5
+
6
+ module ClassMethods
7
+ def redis_search_index(options = {})
8
+ title_field = options[:title_field] || :title
9
+ prefix_index_enable = options[:prefix_index_enable] || false
10
+ ext_fields = options[:ext_fields] || []
11
+
12
+ # store Model name to indexed_models for Rake tasks
13
+ Search.indexed_models = [] if Search.indexed_models == nil
14
+ Search.indexed_models << self
15
+ # bind instance methods and callback events
16
+ class_eval %(
17
+ def redis_search_ext_fields(ext_fields)
18
+ exts = {}
19
+ ext_fields.each do |f|
20
+ exts[f] = instance_eval(f.to_s)
21
+ end
22
+ exts
23
+ end
24
+
25
+ after_create :redis_search_index_create
26
+ def redis_search_index_create
27
+ s = Search::Index.new(:title => self.#{title_field},
28
+ :id => self.id,
29
+ :exts => self.redis_search_ext_fields(#{ext_fields.inspect}),
30
+ :type => self.class.to_s,
31
+ :prefix_index_enable => #{prefix_index_enable})
32
+ s.save
33
+ # release s
34
+ s = nil
35
+ end
36
+
37
+ before_destroy :redis_search_index_remove
38
+ def redis_search_index_remove
39
+ Search::Index.remove(:id => self.id, :title => self.#{title_field}, :type => self.class.to_s)
40
+ end
41
+
42
+ before_update :redis_search_index_update
43
+ def redis_search_index_update
44
+ index_fields_changed = false
45
+ #{ext_fields.inspect}.each do |f|
46
+ next if f.to_s == "id"
47
+ if instance_eval(f.to_s + "_changed?")
48
+ index_fields_changed = true
49
+ end
50
+ end
51
+ begin
52
+ if(self.#{title_field}_changed?)
53
+ index_fields_changed = true
54
+ end
55
+ rescue
56
+ end
57
+ if index_fields_changed
58
+ Search::Index.remove(:id => self.id, :title => self.#{title_field}_was, :type => self.class.to_s)
59
+ self.redis_search_index_create
60
+ end
61
+ end
62
+ )
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,30 @@
1
+ # coding: utf-8
2
+ class Redis
3
+ module Search
4
+ class << self
5
+ attr_accessor :config, :indexed_models
6
+
7
+ def configure
8
+ yield self.config ||= Config.new
9
+ end
10
+ end
11
+
12
+ class Config
13
+ # Redis
14
+ attr_accessor :redis
15
+ # Debug toggle
16
+ attr_accessor :debug
17
+ # config for max length of content with Redis::Search.complete method,default 100
18
+ # Please change this with your real data length, short is fast
19
+ # For example: You use complete search for your User model name field, and the "name" as max length in 15 chars, then you can set here to 15
20
+ # warring! The long content will can't be found, if the config length less than real content.
21
+ attr_accessor :complete_max_length
22
+
23
+ def initialize
24
+ self.debug = false
25
+ self.redis = nil
26
+ self.complete_max_length = 100
27
+ end
28
+ end
29
+ end
30
+ end
@@ -1,15 +1,7 @@
1
1
  # coding: utf-8
2
2
  require "rmmseg"
3
- module RedisSearch
4
- class Search
5
- attr_accessor :type, :title, :id, :exts, :prefix_index_enable
6
- def initialize(options = {})
7
- self.exts = []
8
- options.keys.each do |k|
9
- eval("self.#{k} = options[k]")
10
- end
11
- end
12
-
3
+ class Redis
4
+ module Search
13
5
  def self.split(text)
14
6
  algor = RMMSeg::Algorithm.new(text)
15
7
  words = []
@@ -22,7 +14,7 @@ module RedisSearch
22
14
  end
23
15
 
24
16
  def self.warn(msg)
25
- puts "[RedisSearch][warn]: #{msg}"
17
+ puts "[Redis::Search][warn]: #{msg}"
26
18
  end
27
19
 
28
20
  # 生成 uuid,用于作为 hashes 的 field, sets 关键词的值
@@ -33,56 +25,6 @@ module RedisSearch
33
25
  def self.mk_complete_key(type)
34
26
  "Compl#{type}"
35
27
  end
36
-
37
- def self.word?(word)
38
- return !/^[\w\u4e00-\u9fa5]+$/i.match(word.force_encoding("UTF-8")).blank?
39
- end
40
-
41
- def save
42
- return if self.title.blank?
43
- data = {:title => self.title, :id => self.id, :type => self.type}
44
- self.exts.each do |f|
45
- data[f[0]] = f[1]
46
- end
47
-
48
- # 将原始数据存入 hashes
49
- res = RedisSearch.config.redis.hset(self.type, self.id, data.to_json)
50
- # 保存 sets 索引,以分词的单词为key,用于后面搜索,里面存储 ids
51
- words = Search.split(self.title)
52
- return if words.blank?
53
- words.each do |word|
54
- next if not Search.word?(word)
55
- key = Search.mk_sets_key(self.type,word)
56
- RedisSearch.config.redis.sadd(key, self.id)
57
- end
58
-
59
- # 建立前最索引
60
- if prefix_index_enable
61
- save_prefix_index
62
- end
63
- end
64
-
65
- def save_prefix_index
66
- word = self.title.downcase
67
- RedisSearch.config.redis.sadd(Search.mk_sets_key(self.type,self.title), self.id)
68
- key = Search.mk_complete_key(self.type)
69
- (1..(word.length)).each do |l|
70
- prefix = word[0...l]
71
- RedisSearch.config.redis.zadd(key, 0, prefix)
72
- end
73
- RedisSearch.config.redis.zadd(key, 0, word + "*")
74
- end
75
-
76
- def self.remove(options = {})
77
- type = options[:type]
78
- RedisSearch.config.redis.hdel(type,options[:id])
79
- words = Search.split(options[:title])
80
- words.each do |word|
81
- next if not Search.word?(word)
82
- key = Search.mk_sets_key(type,word)
83
- RedisSearch.config.redis.srem(key, options[:id])
84
- end
85
- end
86
28
 
87
29
  # Use for short title search, this method is search by chars, for example Tag, User, Category ...
88
30
  #
@@ -91,24 +33,24 @@ module RedisSearch
91
33
  # w search char
92
34
  # :limit result limit
93
35
  # h3. usage:
94
- # * RedisSearch::Search.complete("Tag","r") => ["Ruby","Rails", "REST", "Redis", "Redmine"]
95
- # * RedisSearch::Search.complete("Tag","re") => ["Redis", "Redmine"]
96
- # * RedisSearch::Search.complete("Tag","red") => ["Redis", "Redmine"]
97
- # * RedisSearch::Search.complete("Tag","redi") => ["Redis"]
36
+ # * Redis::Search.complete("Tag","r") => ["Ruby","Rails", "REST", "Redis", "Redmine"]
37
+ # * Redis::Search.complete("Tag","re") => ["Redis", "Redmine"]
38
+ # * Redis::Search.complete("Tag","red") => ["Redis", "Redmine"]
39
+ # * Redis::Search.complete("Tag","redi") => ["Redis"]
98
40
  def self.complete(type, w, options = {})
99
41
  limit = options[:limit] || 10
100
42
 
101
43
  prefix_matchs = []
102
44
  # This is not random, try to get replies < MTU size
103
- rangelen = RedisSearch.config.complete_max_length
45
+ rangelen = Redis::Search.config.complete_max_length
104
46
  prefix = w.downcase
105
47
  key = Search.mk_complete_key(type)
106
48
 
107
- start = RedisSearch.config.redis.zrank(key,prefix)
49
+ start = Redis::Search.config.redis.zrank(key,prefix)
108
50
  return [] if !start
109
51
  count = limit
110
52
  max_range = start+(rangelen*limit)-1
111
- range = RedisSearch.config.redis.zrange(key,start,max_range)
53
+ range = Redis::Search.config.redis.zrange(key,start,max_range)
112
54
  while prefix_matchs.length <= count
113
55
  start += rangelen
114
56
  break if !range or range.length == 0
@@ -128,16 +70,16 @@ module RedisSearch
128
70
  words = prefix_matchs.uniq.collect { |w| Search.mk_sets_key(type,w) }
129
71
  if words.length > 1
130
72
  temp_store_key = "tmpsunionstore:#{words.join("+")}"
131
- if !RedisSearch.config.redis.exists(temp_store_key)
73
+ if !Redis::Search.config.redis.exists(temp_store_key)
132
74
  # 将多个词语组合对比,得到并集,并存入临时区域
133
- RedisSearch.config.redis.sunionstore(temp_store_key,*words)
75
+ Redis::Search.config.redis.sunionstore(temp_store_key,*words)
134
76
  # 将临时搜索设为1天后自动清除
135
- RedisSearch.config.redis.expire(temp_store_key,86400)
77
+ Redis::Search.config.redis.expire(temp_store_key,86400)
136
78
  end
137
79
  # 根据需要的数量取出 ids
138
- ids = RedisSearch.config.redis.sort(temp_store_key,:limit => [0,limit])
80
+ ids = Redis::Search.config.redis.sort(temp_store_key,:limit => [0,limit])
139
81
  else
140
- ids = RedisSearch.config.redis.sort(words.first,:limit => [0,limit])
82
+ ids = Redis::Search.config.redis.sort(words.first,:limit => [0,limit])
141
83
  end
142
84
  return [] if ids.blank?
143
85
  hmget(type,ids)
@@ -150,7 +92,7 @@ module RedisSearch
150
92
  # text search text
151
93
  # :limit result limit
152
94
  # h3. usage:
153
- # * RedisSearch::Search.query("Tag","Ruby vs Python")
95
+ # * Redis::Search.query("Tag","Ruby vs Python")
154
96
  def self.query(type, text,options = {})
155
97
  result = []
156
98
  return result if text.strip.blank?
@@ -162,17 +104,17 @@ module RedisSearch
162
104
  return result if words.blank?
163
105
  temp_store_key = "tmpinterstore:#{words.join("+")}"
164
106
  if words.length > 1
165
- if !RedisSearch.config.redis.exists(temp_store_key)
107
+ if !Redis::Search.config.redis.exists(temp_store_key)
166
108
  # 将多个词语组合对比,得到交集,并存入临时区域
167
- RedisSearch.config.redis.sinterstore(temp_store_key,*words)
109
+ Redis::Search.config.redis.sinterstore(temp_store_key,*words)
168
110
  # 将临时搜索设为1天后自动清除
169
- RedisSearch.config.redis.expire(temp_store_key,86400)
111
+ Redis::Search.config.redis.expire(temp_store_key,86400)
170
112
  end
171
113
  # 根据需要的数量取出 ids
172
- ids = RedisSearch.config.redis.sort(temp_store_key,:limit => [0,limit])
114
+ ids = Redis::Search.config.redis.sort(temp_store_key,:limit => [0,limit])
173
115
  else
174
116
  # 根据需要的数量取出 ids
175
- ids = RedisSearch.config.redis.sort(words.first,:limit => [0,limit])
117
+ ids = Redis::Search.config.redis.sort(words.first,:limit => [0,limit])
176
118
  end
177
119
  hmget(type,ids, :sort_field => sort_field)
178
120
  end
@@ -182,7 +124,7 @@ module RedisSearch
182
124
  result = []
183
125
  sort_field = options[:sort_field] || "id"
184
126
  return result if ids.blank?
185
- RedisSearch.config.redis.hmget(type,*ids).each do |r|
127
+ Redis::Search.config.redis.hmget(type,*ids).each do |r|
186
128
  begin
187
129
  result << JSON.parse(r)
188
130
  rescue => e
@@ -0,0 +1,57 @@
1
+ class Redis
2
+ module Search
3
+ class Index
4
+ attr_accessor :type, :title, :id, :exts, :prefix_index_enable
5
+ def initialize(options = {})
6
+ self.exts = []
7
+ options.keys.each do |k|
8
+ eval("self.#{k} = options[k]")
9
+ end
10
+ end
11
+
12
+ def save
13
+ return if self.title.blank?
14
+ data = {:title => self.title, :id => self.id, :type => self.type}
15
+ self.exts.each do |f|
16
+ data[f[0]] = f[1]
17
+ end
18
+
19
+ # 将原始数据存入 hashes
20
+ res = Redis::Search.config.redis.hset(self.type, self.id, data.to_json)
21
+ # 保存 sets 索引,以分词的单词为key,用于后面搜索,里面存储 ids
22
+ words = Search.split(self.title)
23
+ return if words.blank?
24
+ words.each do |word|
25
+ key = Search.mk_sets_key(self.type,word)
26
+ Redis::Search.config.redis.sadd(key, self.id)
27
+ end
28
+
29
+ # 建立前最索引
30
+ if prefix_index_enable
31
+ save_prefix_index
32
+ end
33
+ end
34
+
35
+ def save_prefix_index
36
+ word = self.title.downcase
37
+ Redis::Search.config.redis.sadd(Search.mk_sets_key(self.type,self.title), self.id)
38
+ key = Search.mk_complete_key(self.type)
39
+ (1..(word.length)).each do |l|
40
+ prefix = word[0...l]
41
+ Redis::Search.config.redis.zadd(key, 0, prefix)
42
+ end
43
+ Redis::Search.config.redis.zadd(key, 0, word + "*")
44
+ end
45
+
46
+ def self.remove(options = {})
47
+ type = options[:type]
48
+ Redis::Search.config.redis.hdel(type,options[:id])
49
+ words = Search.split(options[:title])
50
+ words.each do |word|
51
+ key = Search.mk_sets_key(type,word)
52
+ Redis::Search.config.redis.srem(key, options[:id])
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,9 @@
1
+ class Redis
2
+ module Search
3
+ class Railtie < Rails::Railtie
4
+ rake_tasks do
5
+ load File.expand_path('../tasks.rb', __FILE__)
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,40 @@
1
+ # coding: utf-8
2
+ require "redis-search"
3
+ namespace :redis_search do
4
+ desc "Redis-Search index data to Redis"
5
+ task :index => :environment do
6
+ tm = Time.now
7
+ count = 0
8
+ puts "redis-search index".upcase.rjust(120)
9
+ puts "-"*120
10
+ puts "Now indexing search to Redis...".rjust(120)
11
+ puts ""
12
+ Redis::Search.indexed_models.each do |klass|
13
+ print "[#{klass.to_s}]"
14
+ if klass.superclass.to_s == "ActiveRecord::Base"
15
+ klass.find_in_batches(:batch_size => 1000) do |items|
16
+ items.each do |item|
17
+ item.redis_search_index_create
18
+ item = nil
19
+ count += 1
20
+ print "."
21
+ end
22
+ end
23
+ elsif klass.included_modules.collect { |m| m.to_s }.include?("Mongoid::Document")
24
+ klass.all.each do |item|
25
+ item.redis_search_index_create
26
+ item = nil
27
+ count += 1
28
+ print "."
29
+ end
30
+ else
31
+ puts "skiped, not support this ORM in current."
32
+ end
33
+ puts ""
34
+ end
35
+ puts ""
36
+ puts "-"*120
37
+ puts "Indexed #{count} rows | Time spend: #{(Time.now - tm)}s".rjust(120)
38
+ puts "Rebuild Index done.".rjust(120)
39
+ end
40
+ end
@@ -0,0 +1,6 @@
1
+ # coding: utf-8
2
+ require "redis/search/base"
3
+ require "redis/search/finder"
4
+ require "redis/search/index"
5
+ require "redis/search/config"
6
+ require 'redis/search/railtie' if defined?(Rails)
metadata CHANGED
@@ -1,103 +1,77 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: redis-search
3
- version: !ruby/object:Gem::Version
4
- hash: 23
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.4'
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 3
9
- - 2
10
- version: 0.3.2
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Jason Lee
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2011-09-21 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2011-09-22 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: rmmseg-cpp-huacnlee
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: &2153202040 !ruby/object:Gem::Requirement
24
17
  none: false
25
- requirements:
18
+ requirements:
26
19
  - - ~>
27
- - !ruby/object:Gem::Version
28
- hash: 7
29
- segments:
30
- - 0
31
- - 2
32
- - 8
20
+ - !ruby/object:Gem::Version
33
21
  version: 0.2.8
34
22
  type: :runtime
35
- version_requirements: *id001
36
- - !ruby/object:Gem::Dependency
37
- name: redis
38
23
  prerelease: false
39
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: *2153202040
25
+ - !ruby/object:Gem::Dependency
26
+ name: redis
27
+ requirement: &2153198300 !ruby/object:Gem::Requirement
40
28
  none: false
41
- requirements:
42
- - - ">="
43
- - !ruby/object:Gem::Version
44
- hash: 9
45
- segments:
46
- - 2
47
- - 1
48
- - 1
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
49
32
  version: 2.1.1
50
33
  type: :runtime
51
- version_requirements: *id002
52
- description: High performance real-time search (Support Chinese), index in Redis for Rails application.
53
- email:
34
+ prerelease: false
35
+ version_requirements: *2153198300
36
+ description: High performance real-time search (Support Chinese), index in Redis for
37
+ Rails application.
38
+ email:
54
39
  - huacnlee@gmail.com
55
40
  executables: []
56
-
57
41
  extensions: []
58
-
59
42
  extra_rdoc_files: []
60
-
61
- files:
62
- - lib/redis_search/base.rb
63
- - lib/redis_search/config.rb
64
- - lib/redis_search/search.rb
65
- - lib/redis_search.rb
43
+ files:
44
+ - lib/redis/search/base.rb
45
+ - lib/redis/search/config.rb
46
+ - lib/redis/search/finder.rb
47
+ - lib/redis/search/index.rb
48
+ - lib/redis/search/railtie.rb
49
+ - lib/redis/search/tasks.rb
50
+ - lib/redis-search.rb
66
51
  - README.markdown
67
52
  homepage: http://github.com/huacnlee/redis-search
68
53
  licenses: []
69
-
70
54
  post_install_message:
71
55
  rdoc_options: []
72
-
73
- require_paths:
56
+ require_paths:
74
57
  - lib
75
- required_ruby_version: !ruby/object:Gem::Requirement
58
+ required_ruby_version: !ruby/object:Gem::Requirement
76
59
  none: false
77
- requirements:
78
- - - ">="
79
- - !ruby/object:Gem::Version
80
- hash: 3
81
- segments:
82
- - 0
83
- version: "0"
84
- required_rubygems_version: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ! '>='
62
+ - !ruby/object:Gem::Version
63
+ version: '0'
64
+ required_rubygems_version: !ruby/object:Gem::Requirement
85
65
  none: false
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- hash: 23
90
- segments:
91
- - 1
92
- - 3
93
- - 6
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
94
69
  version: 1.3.6
95
70
  requirements: []
96
-
97
71
  rubyforge_project:
98
- rubygems_version: 1.8.8
72
+ rubygems_version: 1.8.6
99
73
  signing_key:
100
74
  specification_version: 3
101
- summary: High performance real-time search (Support Chinese), index in Redis for Rails application.
75
+ summary: High performance real-time search (Support Chinese), index in Redis for Rails
76
+ application.
102
77
  test_files: []
103
-
@@ -1,57 +0,0 @@
1
- module RedisSearch
2
- extend ActiveSupport::Concern
3
-
4
- module ClassMethods
5
- def redis_search_index(options = {})
6
- title_field = options[:title_field] || :title
7
- prefix_index_enable = options[:prefix_index_enable] || false
8
- ext_fields = options[:ext_fields] || []
9
- class_eval %(
10
- def redis_search_ext_fields(ext_fields)
11
- exts = {}
12
- ext_fields.each do |f|
13
- exts[f] = instance_eval(f.to_s)
14
- end
15
- exts
16
- end
17
-
18
- after_create :redis_search_index_create
19
- def redis_search_index_create
20
- s = Search.new(:title => self.#{title_field}, :id => self.id,
21
- :exts => self.redis_search_ext_fields(#{ext_fields}),
22
- :type => self.class.to_s,
23
- :prefix_index_enable => #{prefix_index_enable})
24
- s.save
25
- # release s
26
- s = nil
27
- end
28
-
29
- before_destroy :redis_search_index_remove
30
- def redis_search_index_remove
31
- Search.remove(:id => self.id, :title => self.#{title_field}, :type => self.class.to_s)
32
- end
33
-
34
- before_update :redis_search_index_update
35
- def redis_search_index_update
36
- index_fields_changed = false
37
- #{ext_fields}.each do |f|
38
- next if f.to_s == "id"
39
- if instance_eval(f.to_s + "_changed?")
40
- index_fields_changed = true
41
- end
42
- end
43
- begin
44
- if(self.#{title_field}_changed?)
45
- index_fields_changed = true
46
- end
47
- rescue
48
- end
49
- if index_fields_changed
50
- Search.remove(:id => self.id, :title => self.#{title_field}_was, :type => self.class.to_s)
51
- self.redis_search_index_create
52
- end
53
- end
54
- )
55
- end
56
- end
57
- end
@@ -1,23 +0,0 @@
1
- module RedisSearch
2
- class << self
3
- attr_accessor :config
4
- end
5
-
6
- class Config
7
- # Redis
8
- attr_accessor :redis
9
- # Debug toggle
10
- attr_accessor :debug
11
- # config for max length of content with RedisSearch:Search.complete method,default 100
12
- # Please change this with your real data length, short is fast
13
- # For example: You use complete search for your User model name field, and the "name" as max length in 15 chars, then you can set here to 15
14
- # warring! The long content will can't be found, if the config length less than real content.
15
- attr_accessor :complete_max_length
16
-
17
- def initialize
18
- self.debug = false
19
- self.redis = nil
20
- self.complete_max_length = 100
21
- end
22
- end
23
- end
data/lib/redis_search.rb DELETED
@@ -1,11 +0,0 @@
1
- require "redis_search/base"
2
- require "redis_search/search"
3
- require "redis_search/config"
4
-
5
- module RedisSearch
6
- class << self
7
- def configure
8
- yield self.config ||= Config.new
9
- end
10
- end
11
- end