Module: ThinkingSphinx

Extended by:
SearchMethods::ClassMethods
Defined in:
lib/thinking_sphinx.rb,
lib/thinking_sphinx/facet.rb,
lib/thinking_sphinx/field.rb,
lib/thinking_sphinx/index.rb,
lib/thinking_sphinx/deltas.rb,
lib/thinking_sphinx/search.rb,
lib/thinking_sphinx/source.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/association.rb,
lib/thinking_sphinx/class_facet.rb,
lib/thinking_sphinx/core/string.rb,
lib/thinking_sphinx/facet_search.rb,
lib/thinking_sphinx/active_record.rb,
lib/thinking_sphinx/configuration.rb,
lib/thinking_sphinx/index/builder.rb,
lib/thinking_sphinx/search_methods.rb,
lib/thinking_sphinx/rails_additions.rb,
lib/thinking_sphinx/rails_additions.rb,
lib/thinking_sphinx/rails_additions.rb,
lib/thinking_sphinx/rails_additions.rb,
lib/thinking_sphinx/rails_additions.rb,
lib/thinking_sphinx/index/faux_column.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/deltas/delayed_delta.rb,
lib/thinking_sphinx/deltas/datetime_delta.rb,
lib/thinking_sphinx/adapters/mysql_adapter.rb,
lib/thinking_sphinx/deltas/delayed_delta/job.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/deltas/delayed_delta/delta_job.rb,
lib/thinking_sphinx/active_record/attribute_updates.rb,
lib/thinking_sphinx/active_record/has_many_association.rb,
lib/thinking_sphinx/deltas/delayed_delta/flag_as_deleted_job.rb,
lib/thinking_sphinx/rails_additions.rb,
lib/thinking_sphinx/rails_additions.rb,
lib/thinking_sphinx/rails_additions.rb

Defined Under Namespace

Modules: AbstractQuotedTableName, ActiveRecord, ActiveRecordQuotedName, ActiveRecordStoreFullSTIClass, ArrayExtractOptions, ClassAttributeMethods, Core, Deltas, HashExcept, MetaClass, MysqlQuotedTableName, SearchMethods Classes: AbstractAdapter, Association, Attribute, ClassFacet, Configuration, ConnectionError, Excerpter, Facet, FacetSearch, Field, Index, MysqlAdapter, PostgreSQLAdapter, Property, Search, Source, StaleIdsException

Constant Summary collapse

@@deltas_enabled =
nil
@@updates_enabled =
nil
@@suppress_delta_output =
false
@@remote_sphinx =
false

Class Method Summary collapse

Methods included from SearchMethods::ClassMethods

count, facets, search, search_context, search_count, search_for_id, search_for_ids

Class Method Details

.define_indexes=(value) ⇒ Object

Enable/disable indexes - you may want to do this while migrating data.

ThinkingSphinx.define_indexes = false


84
85
86
# File 'lib/thinking_sphinx.rb', line 84

def self.define_indexes=(value)
  @@define_indexes = value
end

.define_indexes?Boolean

Check if index definition is disabled.

Returns:



75
76
77
78
# File 'lib/thinking_sphinx.rb', line 75

def self.define_indexes?
  @@define_indexes =  true unless defined?(@@define_indexes)
  @@define_indexes == true
end

.deltas_enabled=(value) ⇒ Object

Enable/disable all delta indexing.

ThinkingSphinx.deltas_enabled = false


101
102
103
# File 'lib/thinking_sphinx.rb', line 101

def self.deltas_enabled=(value)
  @@deltas_enabled = value
end

.deltas_enabled?Boolean

Check if delta indexing is enabled.

Returns:



92
93
94
95
# File 'lib/thinking_sphinx.rb', line 92

def self.deltas_enabled?
  @@deltas_enabled  = (ThinkingSphinx::Configuration.environment != 'test') if @@deltas_enabled.nil?
  @@deltas_enabled
end

.indexed_modelsObject

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.



65
66
67
# File 'lib/thinking_sphinx.rb', line 65

def self.indexed_models
  @@indexed_models ||= []
end

.jruby?Boolean

Returns:



198
199
200
# File 'lib/thinking_sphinx.rb', line 198

def self.jruby?
  defined?(JRUBY_VERSION)
end

.microsoft?Boolean

Returns:



194
195
196
# File 'lib/thinking_sphinx.rb', line 194

def self.microsoft?
  RUBY_PLATFORM =~ /mswin/
end

.mysql?Boolean

Returns:



202
203
204
205
206
207
# File 'lib/thinking_sphinx.rb', line 202

def self.mysql?
  ::ActiveRecord::Base.connection.class.name.demodulize == "MysqlAdapter" ||
  ::ActiveRecord::Base.connection.class.name.demodulize == "MysqlplusAdapter" || (
    jruby? && ::ActiveRecord::Base.connection.config[:adapter] == "jdbcmysql"
  )
end

.pid_active?(pid) ⇒ Boolean

Returns:



188
189
190
191
192
# File 'lib/thinking_sphinx.rb', line 188

def self.pid_active?(pid)
  !!Process.kill(0, pid.to_i)
rescue Exception => e
  false
end

.remote_sphinx=(value) ⇒ Object

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


161
162
163
# File 'lib/thinking_sphinx.rb', line 161

def self.remote_sphinx=(value)
  @@remote_sphinx = value
end

.remote_sphinx?Boolean

An indication of whether Sphinx is running on a remote machine instead of the same machine.

Returns:



149
150
151
# File 'lib/thinking_sphinx.rb', line 149

def self.remote_sphinx?
  @@remote_sphinx
end

.sphinx_pidObject



180
181
182
183
184
185
186
# File 'lib/thinking_sphinx.rb', line 180

def self.sphinx_pid
  if File.exists?(ThinkingSphinx::Configuration.instance.pid_file)
    File.read(ThinkingSphinx::Configuration.instance.pid_file)[/\d+/]
  else
    nil
  end
end

.sphinx_running?Boolean

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.

Returns:



169
170
171
# File 'lib/thinking_sphinx.rb', line 169

def self.sphinx_running?
  remote_sphinx? || sphinx_running_by_pid?
end

.sphinx_running_by_pid?Boolean

Check if Sphinx is actually running, provided the pid is on the same machine as this code.

Returns:



176
177
178
# File 'lib/thinking_sphinx.rb', line 176

def self.sphinx_running_by_pid?
  !!sphinx_pid && pid_active?(sphinx_pid)
end

.suppress_delta_output=(value) ⇒ Object



129
130
131
# File 'lib/thinking_sphinx.rb', line 129

def self.suppress_delta_output=(value)
  @@suppress_delta_output = value
end

.suppress_delta_output?Boolean

Returns:



125
126
127
# File 'lib/thinking_sphinx.rb', line 125

def self.suppress_delta_output?
  @@suppress_delta_output
end

.unique_id_expression(offset = nil) ⇒ Object



69
70
71
# File 'lib/thinking_sphinx.rb', line 69

def self.unique_id_expression(offset = nil)
  "* #{ThinkingSphinx.indexed_models.size} + #{offset || 0}"
end

.updates_enabled=(value) ⇒ Object

Enable/disable updates to Sphinx

ThinkingSphinx.updates_enabled = false


119
120
121
# File 'lib/thinking_sphinx.rb', line 119

def self.updates_enabled=(value)
  @@updates_enabled = value
end

.updates_enabled?Boolean

Check if updates are enabled. True by default, unless within the test environment.

Returns:



110
111
112
113
# File 'lib/thinking_sphinx.rb', line 110

def self.updates_enabled?
  @@updates_enabled  = (ThinkingSphinx::Configuration.environment != 'test') if @@updates_enabled.nil?
  @@updates_enabled
end

.use_group_by_shortcut?Boolean

Checks to see if MySQL will allow simplistic GROUP BY statements. If not, or if not using MySQL, this will return false.

Returns:



136
137
138
139
140
141
142
# File 'lib/thinking_sphinx.rb', line 136

def self.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

.versionString

The current version of Thinking Sphinx.

Returns:

  • The version number as a string



57
58
59
60
# File 'lib/thinking_sphinx.rb', line 57

def self.version
  hash = YAML.load_file File.join(File.dirname(__FILE__), '../VERSION.yml')
  [hash[:major], hash[:minor], hash[:patch]].join('.')
end