Module: Ultrasphinx
Child modules and classes
Module Ultrasphinx::Spell
Class Ultrasphinx::Search
Constants
| Name | Value |
|---|---|
| SUBDIR | "config/ultrasphinx" |
| DIR | "#{RAILS_ROOT}/#{SUBDIR}" |
| THIS_DIR | File.expand_path(File.dirname(__FILE__)) |
| CONF_PATH | "#{DIR}/#{RAILS_ENV}.conf" |
| ENV_BASE_PATH | "#{DIR}/#{RAILS_ENV}.base" |
| GENERIC_BASE_PATH | "#{DIR}/default.base" |
| BASE_PATH | (File.exist?(ENV_BASE_PATH) ? ENV_BASE_PATH : GENERIC_BASE_PATH) |
| MAX_INT | 2**32-1 |
| MAX_WORDS | 2**16 |
| MAIN_INDEX | "main" |
| DELTA_INDEX | "delta" |
| INDEXES | [MAIN_INDEX, DELTA_INDEX] |
| CONFIG_MAP | { # These must be symbols for key mapping against Rails itself. :username => 'sql_user', :password => 'sql_pass', :host => 'sql_host', :database => 'sql_db', :port => 'sql_port', :socket => 'sql_sock' |
| CONNECTION_DEFAULTS | { :host => 'localhost', :password => '', :username => 'root' |
| SQL_FUNCTIONS | { 'mysql' => { 'group_concat' => "CAST(GROUP_CONCAT(DISTINCT ? ? SEPARATOR ' ') AS CHAR)", 'delta' => "DATE_SUB(NOW(), INTERVAL ? SECOND)", 'hash' => "CAST(CRC32(?) AS unsigned)", 'range_cast' => "?" |
| DEFAULTS | { 'mysql' => %( type = mysql sql_query_pre = SET SESSION group_concat_max_len = 65535 sql_query_pre = SET NAMES utf8 ), 'postgresql' => %( type = pgsql sql_query_pre = ) |
| ADAPTER | ActiveRecord::Base.connection.instance_variable_get("@config")[:adapter] rescue 'mysql' |
| INDEXER_SETTINGS | options_for('indexer', BASE_PATH) |
| CLIENT_SETTINGS | options_for('client', BASE_PATH) |
| DAEMON_SETTINGS | options_for('searchd', BASE_PATH) |
| SOURCE_SETTINGS | options_for('source', BASE_PATH) |
| INDEX_SETTINGS | options_for('index', BASE_PATH) |
| DICTIONARY | CLIENT_SETTINGS['dictionary_name'] || 'ap' |
| STOPWORDS_PATH | "#{Ultrasphinx::INDEX_SETTINGS['path']}/#{DICTIONARY}-stopwords.txt" |
| MODEL_CONFIGURATION | {} |
Public Class Methods
delta_index_present? ()
See if a delta index was defined.
# File lib/ultrasphinx/ultrasphinx.rb, line 207 207: def self.delta_index_present? 208: if File.exist?(CONF_PATH) 209: File.open(CONF_PATH).readlines.detect do |line| 210: line =~ /^index delta/ 211: end 212: end 213: end
load_stored_procedure (name)
# File lib/ultrasphinx/ultrasphinx.rb, line 61 61: def self.load_stored_procedure(name) 62: open("#{THIS_DIR}/postgresql/#{name}.sql").read.gsub(/\s+/, ' ') 63: end
log (msg)
Debug-mode logger.
# File lib/ultrasphinx/ultrasphinx.rb, line 111 111: def self.log msg 112: # XXX Method name is stupid. 113: if defined? RAILS_DEFAULT_LOGGER 114: RAILS_DEFAULT_LOGGER.debug msg 115: else 116: STDERR.puts msg 117: end 118: end
options_for (heading, path)
Configuration file parser.
# File lib/ultrasphinx/ultrasphinx.rb, line 121 121: def self.options_for(heading, path) 122: # Evaluate ERB 123: template = ERB.new(File.open(path) {|f| f.read}) 124: contents = template.result(binding) 125: 126: # Find the correct heading. 127: section = contents[/^#{heading.gsub('/', '__')}\s*?\{(.*?)\}/m, 1] 128: 129: if section 130: # Convert to a hash 131: options = section.split("\n").map do |line| 132: line =~ /\s*(.*?)\s*=\s*([^\#]*)/ 133: $1 ? [$1, $2.strip] : [] 134: end 135: Hash[*options.flatten] 136: else 137: # XXX Is it safe to raise here? 138: Ultrasphinx.say "warning; heading #{heading} not found in #{path}; it may be corrupted. " 139: {} 140: end 141: end
say (msg)
Warn-mode logger. Also called from rake tasks.
# File lib/ultrasphinx/ultrasphinx.rb, line 95 95: def self.say msg 96: # XXX Method name is stupid. 97: if with_rake 98: puts msg[0..0].upcase + msg[1..-1] 99: else 100: msg = "** ultrasphinx: #{msg}" 101: if defined? RAILS_DEFAULT_LOGGER 102: RAILS_DEFAULT_LOGGER.warn msg 103: else 104: STDERR.puts msg 105: end 106: end 107: nil # Explicitly return nil 108: end
verify_database_name ()
Complain if the database names go out of sync.
# File lib/ultrasphinx/ultrasphinx.rb, line 191 191: def self.verify_database_name 192: if File.exist? CONF_PATH 193: begin 194: if options_for( 195: "source #{MODEL_CONFIGURATION.keys.first.tableize}_#{MAIN_INDEX}", 196: CONF_PATH 197: )['sql_db'] != ActiveRecord::Base.connection.instance_variable_get("@config")[:database] 198: say "warning; configured database name is out-of-date" 199: say "please run 'rake ultrasphinx:configure'" 200: end 201: rescue Object 202: end 203: end 204: end