yoomee-mongosphinx 0.1.1 → 0.1.2
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/lib/mixins/indexer.rb +53 -14
- metadata +4 -4
data/lib/mixins/indexer.rb
CHANGED
@@ -101,7 +101,10 @@ module MongoMapper # :nodoc:
|
|
101
101
|
# gem.
|
102
102
|
|
103
103
|
cattr_accessor :fulltext_keys
|
104
|
-
cattr_accessor :fulltext_opts
|
104
|
+
cattr_accessor :fulltext_opts
|
105
|
+
cattr_accessor :has_delta_index
|
106
|
+
|
107
|
+
self.has_delta_index = opts[:delta] || false
|
105
108
|
|
106
109
|
self.fulltext_keys = keys
|
107
110
|
self.fulltext_opts = opts
|
@@ -111,8 +114,40 @@ module MongoMapper # :nodoc:
|
|
111
114
|
# Schema and cowardly ignore if not.
|
112
115
|
|
113
116
|
before_save :save_callback
|
117
|
+
before_create :increment_sphinx_id
|
118
|
+
|
119
|
+
key :sphinx_id, Integer
|
120
|
+
alias_attribute :_sphinx_id, :sphinx_id
|
121
|
+
|
122
|
+
if opts[:delta]
|
123
|
+
before_save :set_delta
|
124
|
+
after_save :rebuild_delta_index
|
125
|
+
key :delta, Boolean, :default => true
|
126
|
+
define_method(:rebuild_delta_index) do
|
127
|
+
Rails.logger.info("rebuild_delta_index = #{self.class.to_s.underscore}_delta")
|
128
|
+
Process.fork {`rake mongosphinx:rebuild index=#{self.class.to_s.underscore}_delta`}
|
129
|
+
end
|
130
|
+
define_method(:set_delta) do
|
131
|
+
self.delta = true
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
(class << self; self; end).module_eval do
|
136
|
+
define_method :xml_for_sphinx_core do
|
137
|
+
puts MongoSphinx::Indexer::XMLDocset.new(self.all(:fields => keys << "sphinx_id")).to_s
|
138
|
+
end
|
139
|
+
if opts[:delta]
|
140
|
+
define_method :xml_for_sphinx_delta do
|
141
|
+
puts MongoSphinx::Indexer::XMLDocset.new(self.all(:fields => keys << "sphinx_id", :delta => true)).to_s
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
114
145
|
|
115
|
-
|
146
|
+
define_method(:increment_sphinx_id) do
|
147
|
+
self.sphinx_id = ((last_id = self.class.sort(:sphinx_id).last.try(:sphinx_id)) ? last_id + 1 : 1)
|
148
|
+
end
|
149
|
+
|
150
|
+
end
|
116
151
|
|
117
152
|
# Searches for an object of this model class (e.g. Post, Comment) and
|
118
153
|
# the requested query string. The query string may contain any query
|
@@ -142,7 +177,7 @@ module MongoMapper # :nodoc:
|
|
142
177
|
fulltext_opts[:port])
|
143
178
|
query = query + " @classname #{self}"
|
144
179
|
end
|
145
|
-
|
180
|
+
|
146
181
|
client.match_mode = options[:match_mode] || :extended
|
147
182
|
|
148
183
|
if (limit = options[:limit])
|
@@ -157,20 +192,24 @@ module MongoMapper # :nodoc:
|
|
157
192
|
client.sort_mode = :extended
|
158
193
|
client.sort_by = sort_by
|
159
194
|
end
|
195
|
+
|
196
|
+
index_names = "*"
|
197
|
+
debugger
|
198
|
+
if self != Document
|
199
|
+
index_names = "#{self.to_s.underscore}_core"
|
200
|
+
index_names += " #{self.to_s.underscore}_delta" if self.has_delta_index
|
201
|
+
end
|
202
|
+
debugger
|
203
|
+
result = client.query(query, index_names)
|
160
204
|
|
161
|
-
result =
|
162
|
-
|
163
|
-
|
164
|
-
if result and result[:status] == 0 and !(matches = result[:matches]).empty?
|
165
|
-
classname = nil
|
166
|
-
ids = matches.collect do |row|
|
167
|
-
classname = MongoSphinx::MultiAttribute.decode(row[:attributes]['csphinx-class'])
|
168
|
-
(row[:doc].to_i) rescue nil
|
205
|
+
if result and result[:status] == 0 and !(sphinx_matches = result[:matches]).empty?
|
206
|
+
matches = sphinx_matches.collect do |row|
|
207
|
+
{:classname => MongoSphinx::MultiAttribute.decode(row[:attributes]['csphinx-class']), :id => (row[:doc].to_i)} rescue nil
|
169
208
|
end.compact
|
170
|
-
return
|
209
|
+
return matches if options[:raw]
|
171
210
|
objects = []
|
172
|
-
|
173
|
-
objects <<
|
211
|
+
matches.each do |match|
|
212
|
+
objects << match[:classname].constantize.find_by_sphinx_id(match[:id])
|
174
213
|
end
|
175
214
|
return objects
|
176
215
|
else
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yoomee-mongosphinx
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 31
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 2
|
10
|
+
version: 0.1.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Matt Atkins
|
@@ -18,7 +18,7 @@ autorequire:
|
|
18
18
|
bindir: bin
|
19
19
|
cert_chain: []
|
20
20
|
|
21
|
-
date: 2010-08-
|
21
|
+
date: 2010-08-16 00:00:00 +01:00
|
22
22
|
default_executable:
|
23
23
|
dependencies: []
|
24
24
|
|