Class: ThinkingSphinx::Configuration
- Inherits:
-
Object
- Object
- ThinkingSphinx::Configuration
- Includes:
- Singleton
- Defined in:
- lib/thinking_sphinx/configuration.rb
Overview
This class both keeps track of the configuration settings for Sphinx and also generates the resulting file for Sphinx to use.
Here are the default settings, relative to RAILS_ROOT where relevant:
- config file
-
config/#Configuration.environment.sphinx.conf
- searchd log file
-
log/searchd.log
- query log file
-
log/searchd.query.log
- pid file
-
log/searchd.#Configuration.environment.pid
- searchd files
-
db/sphinx/#Configuration.environment/
- address
-
127.0.0.1
- port
-
3312
- allow star
-
false
- min prefix length
-
1
- min infix length
-
1
- mem limit
-
64M
- max matches
-
1000
- morphology
-
nil
- charset type
-
utf-8
- charset table
-
nil
- ignore chars
-
nil
- html strip
-
false
- html remove elements
-
”
- searchd_binary_name
-
searchd
- indexer_binary_name
-
indexer
If you want to change these settings, create a YAML file at config/sphinx.yml with settings for each environment, in a similar fashion to database.yml - using the following keys: config_file, searchd_log_file, query_log_file, pid_file, searchd_file_path, port, allow_star, enable_star, min_prefix_len, min_infix_len, mem_limit, max_matches, morphology, charset_type, charset_table, ignore_chars, html_strip, html_remove_elements, delayed_job_priority, searchd_binary_name, indexer_binary_name.
I think you’ve got the idea.
Each setting in the YAML file is optional - so only put in the ones you want to change.
Keep in mind, if for some particular reason you’re using a version of Sphinx older than 0.9.8 r871 (that’s prior to the proper 0.9.8 release), don’t set allow_star to true.
Constant Summary collapse
- SourceOptions =
%w( mysql_connect_flags sql_range_step sql_query_pre sql_query_post sql_ranged_throttle sql_query_post_index )
- IndexOptions =
%w( charset_table charset_type docinfo enable_star exceptions html_index_attrs html_remove_elements html_strip ignore_chars min_infix_len min_prefix_len min_word_len mlock morphology ngram_chars ngram_len phrase_boundary phrase_boundary_step preopen stopwords wordforms )
- CustomOptions =
%w( disable_range )
Instance Attribute Summary collapse
-
#address ⇒ Object
Returns the value of attribute address.
-
#allow_star ⇒ Object
Returns the value of attribute allow_star.
-
#app_root ⇒ Object
Returns the value of attribute app_root.
-
#bin_path ⇒ Object
Returns the value of attribute bin_path.
-
#config_file ⇒ Object
Returns the value of attribute config_file.
-
#configuration ⇒ Object
readonly
Returns the value of attribute configuration.
-
#database_yml_file ⇒ Object
Returns the value of attribute database_yml_file.
-
#delayed_job_priority ⇒ Object
Returns the value of attribute delayed_job_priority.
-
#environment ⇒ Object
readonly
Returns the value of attribute environment.
-
#index_options ⇒ Object
Returns the value of attribute index_options.
-
#indexer_binary_name ⇒ Object
Returns the value of attribute indexer_binary_name.
-
#model_directories ⇒ Object
Returns the value of attribute model_directories.
-
#pid_file ⇒ Object
Returns the value of attribute pid_file.
-
#port ⇒ Object
Returns the value of attribute port.
-
#query_log_file ⇒ Object
Returns the value of attribute query_log_file.
-
#searchd_binary_name ⇒ Object
Returns the value of attribute searchd_binary_name.
-
#searchd_file_path ⇒ Object
Returns the value of attribute searchd_file_path.
-
#searchd_log_file ⇒ Object
Returns the value of attribute searchd_log_file.
-
#source_options ⇒ Object
Returns the value of attribute source_options.
Class Method Summary collapse
Instance Method Summary collapse
-
#build(file_path = nil) ⇒ Object
Generate the config file for Sphinx by using all the settings defined and looping through all the models with indexes to build the relevant indexer and searchd configuration, and sources and indexes details.
- #client ⇒ Object
- #controller ⇒ Object
-
#initialize(app_root = Dir.pwd) ⇒ Configuration
constructor
Load in the configuration settings - this will look for config/sphinx.yml and parse it according to the current environment.
-
#load_models ⇒ Object
Make sure all models are loaded - without reloading any that ActiveRecord::Base is already aware of (otherwise we start to hit some messy dependencies issues).
- #models_by_crc ⇒ Object
- #reset(custom_app_root = nil) ⇒ Object
Constructor Details
#initialize(app_root = Dir.pwd) ⇒ Configuration
Load in the configuration settings - this will look for config/sphinx.yml and parse it according to the current environment.
75 76 77 |
# File 'lib/thinking_sphinx/configuration.rb', line 75 def initialize(app_root = Dir.pwd) self.reset end |
Instance Attribute Details
#address ⇒ Object
Returns the value of attribute address.
63 64 65 |
# File 'lib/thinking_sphinx/configuration.rb', line 63 def address @address end |
#allow_star ⇒ Object
Returns the value of attribute allow_star.
63 64 65 |
# File 'lib/thinking_sphinx/configuration.rb', line 63 def allow_star @allow_star end |
#app_root ⇒ Object
Returns the value of attribute app_root.
63 64 65 |
# File 'lib/thinking_sphinx/configuration.rb', line 63 def app_root @app_root end |
#bin_path ⇒ Object
Returns the value of attribute bin_path.
63 64 65 |
# File 'lib/thinking_sphinx/configuration.rb', line 63 def bin_path @bin_path end |
#config_file ⇒ Object
Returns the value of attribute config_file.
63 64 65 |
# File 'lib/thinking_sphinx/configuration.rb', line 63 def config_file @config_file end |
#configuration ⇒ Object (readonly)
Returns the value of attribute configuration.
70 71 72 |
# File 'lib/thinking_sphinx/configuration.rb', line 70 def configuration @configuration end |
#database_yml_file ⇒ Object
Returns the value of attribute database_yml_file.
63 64 65 |
# File 'lib/thinking_sphinx/configuration.rb', line 63 def database_yml_file @database_yml_file end |
#delayed_job_priority ⇒ Object
Returns the value of attribute delayed_job_priority.
63 64 65 |
# File 'lib/thinking_sphinx/configuration.rb', line 63 def delayed_job_priority @delayed_job_priority end |
#environment ⇒ Object (readonly)
Returns the value of attribute environment.
70 71 72 |
# File 'lib/thinking_sphinx/configuration.rb', line 70 def environment @environment end |
#index_options ⇒ Object
Returns the value of attribute index_options.
68 69 70 |
# File 'lib/thinking_sphinx/configuration.rb', line 68 def @index_options end |
#indexer_binary_name ⇒ Object
Returns the value of attribute indexer_binary_name.
63 64 65 |
# File 'lib/thinking_sphinx/configuration.rb', line 63 def indexer_binary_name @indexer_binary_name end |
#model_directories ⇒ Object
Returns the value of attribute model_directories.
63 64 65 |
# File 'lib/thinking_sphinx/configuration.rb', line 63 def model_directories @model_directories end |
#pid_file ⇒ Object
Returns the value of attribute pid_file.
63 64 65 |
# File 'lib/thinking_sphinx/configuration.rb', line 63 def pid_file @pid_file end |
#port ⇒ Object
Returns the value of attribute port.
63 64 65 |
# File 'lib/thinking_sphinx/configuration.rb', line 63 def port @port end |
#query_log_file ⇒ Object
Returns the value of attribute query_log_file.
63 64 65 |
# File 'lib/thinking_sphinx/configuration.rb', line 63 def query_log_file @query_log_file end |
#searchd_binary_name ⇒ Object
Returns the value of attribute searchd_binary_name.
63 64 65 |
# File 'lib/thinking_sphinx/configuration.rb', line 63 def searchd_binary_name @searchd_binary_name end |
#searchd_file_path ⇒ Object
Returns the value of attribute searchd_file_path.
63 64 65 |
# File 'lib/thinking_sphinx/configuration.rb', line 63 def searchd_file_path @searchd_file_path end |
#searchd_log_file ⇒ Object
Returns the value of attribute searchd_log_file.
63 64 65 |
# File 'lib/thinking_sphinx/configuration.rb', line 63 def searchd_log_file @searchd_log_file end |
#source_options ⇒ Object
Returns the value of attribute source_options.
68 69 70 |
# File 'lib/thinking_sphinx/configuration.rb', line 68 def @source_options end |
Class Method Details
.configure {|instance| ... } ⇒ Object
79 80 81 82 |
# File 'lib/thinking_sphinx/configuration.rb', line 79 def self.configure(&block) yield instance instance.reset(instance.app_root) end |
.environment ⇒ Object
122 123 124 125 126 |
# File 'lib/thinking_sphinx/configuration.rb', line 122 def self.environment @@environment ||= ( defined?(Merb) ? Merb.environment : ENV['RAILS_ENV'] ) || "development" end |
Instance Method Details
#build(file_path = nil) ⇒ Object
Generate the config file for Sphinx by using all the settings defined and looping through all the models with indexes to build the relevant indexer and searchd configuration, and sources and indexes details.
140 141 142 143 144 145 146 147 148 149 150 151 152 153 |
# File 'lib/thinking_sphinx/configuration.rb', line 140 def build(file_path=nil) load_models file_path ||= "#{self.config_file}" @configuration.indexes.clear ThinkingSphinx.indexed_models.each_with_index do |model, model_index| @configuration.indexes.concat model.constantize.to_riddle(model_index) end open(file_path, "w") do |file| file.write @configuration.render end end |
#client ⇒ Object
226 227 228 229 230 |
# File 'lib/thinking_sphinx/configuration.rb', line 226 def client client = Riddle::Client.new address, port client.max_matches = configuration.searchd.max_matches || 1000 client end |
#controller ⇒ Object
132 133 134 |
# File 'lib/thinking_sphinx/configuration.rb', line 132 def controller @controller ||= Riddle::Controller.new(@configuration, self.config_file) end |
#load_models ⇒ Object
Make sure all models are loaded - without reloading any that ActiveRecord::Base is already aware of (otherwise we start to hit some messy dependencies issues).
159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 |
# File 'lib/thinking_sphinx/configuration.rb', line 159 def load_models return if defined?(Rails) && Rails.configuration.cache_classes && Rails::VERSION::STRING.to_f > 2.1 self.model_directories.each do |base| Dir["#{base}**/*.rb"].each do |file| model_name = file.gsub(/^#{base}([\w_\/\\]+)\.rb/, '\1') next if model_name.nil? next if ::ActiveRecord::Base.send(:subclasses).detect { |model| model.name == model_name } begin model_name.camelize.constantize rescue LoadError model_name.gsub!(/.*[\/\\]/, '').nil? ? next : retry rescue NameError next rescue StandardError puts "Warning: Error loading #{file}" end end end end |
#models_by_crc ⇒ Object
232 233 234 235 236 237 238 239 240 241 242 |
# File 'lib/thinking_sphinx/configuration.rb', line 232 def models_by_crc @models_by_crc ||= begin ThinkingSphinx.indexed_models.inject({}) do |hash, model| hash[model.constantize.to_crc32] = model Object.subclasses_of(model.constantize).each { |subclass| hash[subclass.to_crc32] = subclass.name } hash end end end |
#reset(custom_app_root = nil) ⇒ Object
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
# File 'lib/thinking_sphinx/configuration.rb', line 84 def reset(custom_app_root=nil) if custom_app_root self.app_root = custom_app_root else self.app_root = RAILS_ROOT if defined?(RAILS_ROOT) self.app_root = Merb.root if defined?(Merb) self.app_root ||= app_root end @configuration = Riddle::Configuration.new @configuration.searchd.address = "127.0.0.1" @configuration.searchd.port = 3312 @configuration.searchd.pid_file = "#{self.app_root}/log/searchd.#{environment}.pid" @configuration.searchd.log = "#{self.app_root}/log/searchd.log" @configuration.searchd.query_log = "#{self.app_root}/log/searchd.query.log" self.database_yml_file = "#{self.app_root}/config/database.yml" self.config_file = "#{self.app_root}/config/#{environment}.sphinx.conf" self.searchd_file_path = "#{self.app_root}/db/sphinx/#{environment}" self.allow_star = false self.bin_path = "" self.model_directories = ["#{app_root}/app/models/"] + Dir.glob("#{app_root}/vendor/plugins/*/app/models/") self.delayed_job_priority = 0 self. = {} self. = { :charset_type => "utf-8" } self.searchd_binary_name = "searchd" self.indexer_binary_name = "indexer" parse_config self end |