Module: ThinkingSphinx
- Extended by:
- SearchMethods::ClassMethods
- Defined in:
- lib/thinking_sphinx.rb,
lib/thinking_sphinx/join.rb,
lib/thinking_sphinx/facet.rb,
lib/thinking_sphinx/field.rb,
lib/thinking_sphinx/index.rb,
lib/thinking_sphinx/search.rb,
lib/thinking_sphinx/deltas.rb,
lib/thinking_sphinx/source.rb,
lib/thinking_sphinx/railtie.rb,
lib/thinking_sphinx/version.rb,
lib/thinking_sphinx/property.rb,
lib/thinking_sphinx/attribute.rb,
lib/thinking_sphinx/excerpter.rb,
lib/thinking_sphinx/source/sql.rb,
lib/thinking_sphinx/class_facet.rb,
lib/thinking_sphinx/association.rb,
lib/thinking_sphinx/core/string.rb,
lib/thinking_sphinx/auto_version.rb,
lib/thinking_sphinx/facet_search.rb,
lib/thinking_sphinx/index/builder.rb,
lib/thinking_sphinx/configuration.rb,
lib/thinking_sphinx/active_record.rb,
lib/thinking_sphinx/bundled_search.rb,
lib/thinking_sphinx/search_methods.rb,
lib/thinking_sphinx/index/faux_column.rb,
lib/thinking_sphinx/action_controller.rb,
lib/thinking_sphinx/active_record/delta.rb,
lib/thinking_sphinx/active_record/scopes.rb,
lib/thinking_sphinx/deltas/default_delta.rb,
lib/thinking_sphinx/adapters/mysql_adapter.rb,
lib/thinking_sphinx/adapters/abstract_adapter.rb,
lib/thinking_sphinx/source/internal_properties.rb,
lib/thinking_sphinx/adapters/postgresql_adapter.rb,
lib/thinking_sphinx/active_record/log_subscriber.rb,
lib/thinking_sphinx/active_record/collection_proxy.rb,
lib/thinking_sphinx/active_record/attribute_updates.rb,
lib/thinking_sphinx/active_record/has_many_association.rb,
lib/thinking_sphinx/active_record/collection_proxy_with_scopes.rb,
lib/thinking_sphinx/active_record/has_many_association_with_scopes.rb
Defined Under Namespace
Modules: ActionController, ActiveRecord, Core, Deltas, SearchMethods Classes: AbstractAdapter, Association, Attribute, AutoVersion, BundledSearch, ClassFacet, Configuration, ConnectionError, Context, Excerpter, Facet, FacetSearch, Field, Index, Join, MysqlAdapter, PostgreSQLAdapter, Property, Railtie, Search, Source, SphinxError, StaleIdsException, Test
Constant Summary
- Version =
'2.0.10'- @@sphinx_mutex =
The collection of indexed models. Keep in mind that Rails lazily loads its classes, so this may not actually be populated with all the models that have Sphinx indexes.
Mutex.new
- @@context =
nil- @@define_indexes =
true- @@deltas_enabled =
nil- @@updates_enabled =
nil- @@suppress_delta_output =
false- @@remote_sphinx =
false- @@use_group_by_shortcut =
nil
Class Method Summary (collapse)
- + (Object) context
-
+ (Object) define_indexes=(value)
Enable/disable indexes - you may want to do this while migrating data.
-
+ (Boolean) define_indexes?
Check if index definition is disabled.
-
+ (Object) deltas_enabled=(value)
Enable/disable delta indexing.
-
+ (Boolean) deltas_enabled?
Check if delta indexing is enabled/disabled.
-
+ (Object) deltas_suspended=(value)
Suspend/resume delta indexing.
-
+ (Boolean) deltas_suspended?
Check if delta indexing is suspended.
- + (Boolean) jruby?
- + (Boolean) microsoft?
- + (Object) mutex
- + (Boolean) mysql?
- + (Boolean) pid_active?(pid)
- + (Boolean) rails_3_1?
-
+ (Object) remote_sphinx=(value)
Tells Thinking Sphinx that Sphinx is running on a different machine, and thus it can't reliably guess whether it is running or not (ie: the #sphinx_running? method), and so just assumes it is.
-
+ (Boolean) remote_sphinx?
An indication of whether Sphinx is running on a remote machine instead of the same machine.
- + (Object) reset_context!(context = nil)
- + (Object) reset_use_group_by_shortcut
- + (Object) sphinx_pid
-
+ (Boolean) sphinx_running?
Check if Sphinx is running.
-
+ (Boolean) sphinx_running_by_pid?
Check if Sphinx is actually running, provided the pid is on the same machine as this code.
- + (Object) suppress_delta_output=(value)
- + (Boolean) suppress_delta_output?
- + (Object) unique_id_expression(adapter, offset = nil)
-
+ (Object) updates_enabled=(value)
Enable/disable updates to Sphinx.
-
+ (Boolean) updates_enabled?
Check if updates are enabled.
-
+ (Boolean) use_group_by_shortcut?
Checks to see if MySQL will allow simplistic GROUP BY statements.
Methods included from SearchMethods::ClassMethods
count, facets, search, search_context, search_count, search_for_id, search_for_ids
Class Method Details
+ (Object) context
76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/thinking_sphinx.rb', line 76 def self.context if @@context.nil? mutex.synchronize do if @@context.nil? @@context = ThinkingSphinx::Context.new @@context.prepare end end end @@context end |
+ (Object) define_indexes=(value)
Enable/disable indexes - you may want to do this while migrating data.
ThinkingSphinx.define_indexes = false
109 110 111 112 113 |
# File 'lib/thinking_sphinx.rb', line 109 def self.define_indexes=(value) mutex.synchronize do @@define_indexes = value end end |
+ (Boolean) define_indexes?
Check if index definition is disabled.
101 102 103 |
# File 'lib/thinking_sphinx.rb', line 101 def self.define_indexes? @@define_indexes end |
+ (Object) deltas_enabled=(value)
Enable/disable delta indexing.
ThinkingSphinx.deltas_enabled = false
135 136 137 138 139 |
# File 'lib/thinking_sphinx.rb', line 135 def self.deltas_enabled=(value) mutex.synchronize do @@deltas_enabled = value end end |
+ (Boolean) deltas_enabled?
Check if delta indexing is enabled/disabled.
117 118 119 120 121 122 123 124 125 126 127 128 129 |
# File 'lib/thinking_sphinx.rb', line 117 def self.deltas_enabled? if @@deltas_enabled.nil? mutex.synchronize do if @@deltas_enabled.nil? @@deltas_enabled = ( ThinkingSphinx::Configuration.environment != "test" ) end end end @@deltas_enabled && !deltas_suspended? end |
+ (Object) deltas_suspended=(value)
Suspend/resume delta indexing.
ThinkingSphinx.deltas_suspended = false
155 156 157 |
# File 'lib/thinking_sphinx.rb', line 155 def self.deltas_suspended=(value) Thread.current[:thinking_sphinx_deltas_suspended] = value end |
+ (Boolean) deltas_suspended?
Check if delta indexing is suspended.
143 144 145 146 147 148 149 |
# File 'lib/thinking_sphinx.rb', line 143 def self.deltas_suspended? if Thread.current[:thinking_sphinx_deltas_suspended].nil? Thread.current[:thinking_sphinx_deltas_suspended] = false end Thread.current[:thinking_sphinx_deltas_suspended] end |
+ (Boolean) jruby?
279 280 281 |
# File 'lib/thinking_sphinx.rb', line 279 def self.jruby? defined?(JRUBY_VERSION) end |
+ (Boolean) microsoft?
275 276 277 |
# File 'lib/thinking_sphinx.rb', line 275 def self.microsoft? RUBY_PLATFORM =~ /mswin/ end |
+ (Object) mutex
72 73 74 |
# File 'lib/thinking_sphinx.rb', line 72 def self.mutex @@sphinx_mutex end |
+ (Boolean) mysql?
283 284 285 286 287 288 289 |
# File 'lib/thinking_sphinx.rb', line 283 def self.mysql? ::ActiveRecord::Base.connection.class.name.demodulize == "MysqlAdapter" || ::ActiveRecord::Base.connection.class.name.demodulize == "Mysql2Adapter" || ::ActiveRecord::Base.connection.class.name.demodulize == "MysqlplusAdapter" || ( jruby? && ::ActiveRecord::Base.connection.config[:adapter] == "jdbcmysql" ) end |
+ (Boolean) pid_active?(pid)
267 268 269 270 271 272 273 |
# File 'lib/thinking_sphinx.rb', line 267 def self.pid_active?(pid) !!Process.kill(0, pid.to_i) rescue Errno::EPERM => e true rescue Exception => e false end |
+ (Boolean) rails_3_1?
291 292 293 |
# File 'lib/thinking_sphinx.rb', line 291 def self.rails_3_1? !!defined?(::ActiveRecord::Associations::CollectionProxy) end |
+ (Object) remote_sphinx=(value)
Tells Thinking Sphinx that Sphinx is running on a different machine, and thus it can't reliably guess whether it is running or not (ie: the #sphinx_running? method), and so just assumes it is.
Useful for multi-machine deployments. Set it in your production.rb file.
ThinkingSphinx.remote_sphinx = true
238 239 240 241 242 |
# File 'lib/thinking_sphinx.rb', line 238 def self.remote_sphinx=(value) mutex.synchronize do @@remote_sphinx = value end end |
+ (Boolean) remote_sphinx?
An indication of whether Sphinx is running on a remote machine instead of the same machine.
226 227 228 |
# File 'lib/thinking_sphinx.rb', line 226 def self.remote_sphinx? @@remote_sphinx end |
+ (Object) reset_context!(context = nil)
89 90 91 92 93 |
# File 'lib/thinking_sphinx.rb', line 89 def self.reset_context!(context = nil) mutex.synchronize do @@context = context end end |
+ (Object) reset_use_group_by_shortcut
217 218 219 220 221 |
# File 'lib/thinking_sphinx.rb', line 217 def self.reset_use_group_by_shortcut mutex.synchronize do @@use_group_by_shortcut = nil end end |
+ (Object) sphinx_pid
259 260 261 262 263 264 265 |
# File 'lib/thinking_sphinx.rb', line 259 def self.sphinx_pid if File.exists?(ThinkingSphinx::Configuration.instance.pid_file) File.read(ThinkingSphinx::Configuration.instance.pid_file)[/\d+/] else nil end end |
+ (Boolean) sphinx_running?
Check if Sphinx is running. If remote_sphinx is set to true (indicating Sphinx is on a different machine), this will always return true, and you will have to handle any connection errors yourself.
248 249 250 |
# File 'lib/thinking_sphinx.rb', line 248 def self.sphinx_running? remote_sphinx? || sphinx_running_by_pid? end |
+ (Boolean) sphinx_running_by_pid?
Check if Sphinx is actually running, provided the pid is on the same machine as this code.
255 256 257 |
# File 'lib/thinking_sphinx.rb', line 255 def self.sphinx_running_by_pid? !!sphinx_pid && pid_active?(sphinx_pid) end |
+ (Object) suppress_delta_output=(value)
190 191 192 193 194 |
# File 'lib/thinking_sphinx.rb', line 190 def self.suppress_delta_output=(value) mutex.synchronize do @@suppress_delta_output = value end end |
+ (Boolean) suppress_delta_output?
186 187 188 |
# File 'lib/thinking_sphinx.rb', line 186 def self.suppress_delta_output? @@suppress_delta_output end |
+ (Object) unique_id_expression(adapter, offset = nil)
95 96 97 |
# File 'lib/thinking_sphinx.rb', line 95 def self.unique_id_expression(adapter, offset = nil) "* #{adapter.cast_to_int context.indexed_models.size} + #{offset || 0}" end |
+ (Object) updates_enabled=(value)
Enable/disable updates to Sphinx
ThinkingSphinx.updates_enabled = false
180 181 182 183 184 |
# File 'lib/thinking_sphinx.rb', line 180 def self.updates_enabled=(value) mutex.synchronize do @@updates_enabled = value end end |
+ (Boolean) updates_enabled?
Check if updates are enabled. True by default, unless within the test environment.
162 163 164 165 166 167 168 169 170 171 172 173 174 |
# File 'lib/thinking_sphinx.rb', line 162 def self.updates_enabled? if @@updates_enabled.nil? mutex.synchronize do if @@updates_enabled.nil? @@updates_enabled = ( ThinkingSphinx::Configuration.environment != "test" ) end end end @@updates_enabled end |
+ (Boolean) use_group_by_shortcut?
Checks to see if MySQL will allow simplistic GROUP BY statements. If not, or if not using MySQL, this will return false.
199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 |
# File 'lib/thinking_sphinx.rb', line 199 def self.use_group_by_shortcut? if @@use_group_by_shortcut.nil? mutex.synchronize do if @@use_group_by_shortcut.nil? @@use_group_by_shortcut = !!( mysql? && ::ActiveRecord::Base.connection.select_all( "SELECT @@global.sql_mode, @@session.sql_mode;" ).all? { |key, value| value.nil? || value[/ONLY_FULL_GROUP_BY/].nil? } ) end end end @@use_group_by_shortcut end |