ultrasphinx 1.6.7 → 1.7
Sign up to get free protection for your applications and to get access to all the features.
- data.tar.gz.sig +0 -0
- data/CHANGELOG +2 -0
- data/DEPLOYMENT_NOTES +29 -0
- data/Manifest +7 -2
- data/RAKE_TASKS +15 -0
- data/README +14 -17
- data/TODO +7 -1
- data/examples/default.base +16 -2
- data/lib/ultrasphinx.rb +2 -2
- data/lib/ultrasphinx/associations.rb +25 -0
- data/lib/ultrasphinx/configure.rb +26 -16
- data/lib/ultrasphinx/fields.rb +7 -4
- data/lib/ultrasphinx/is_indexed.rb +37 -25
- data/lib/ultrasphinx/search.rb +1 -0
- data/lib/ultrasphinx/search/internals.rb +10 -3
- data/lib/ultrasphinx/search/parser.rb +14 -11
- data/lib/ultrasphinx/ultrasphinx.rb +6 -4
- data/test/integration/app/app/models/geo/address.rb +1 -1
- data/test/integration/app/app/models/geo/country.rb +4 -0
- data/test/integration/app/config/boot.rb +95 -32
- data/test/integration/app/config/environment.rb +4 -1
- data/test/integration/app/config/environments/development.rb +4 -4
- data/test/integration/app/config/ultrasphinx/development.conf.canonical +45 -13
- data/test/integration/app/db/migrate/009_create_countries.rb +11 -0
- data/test/integration/app/test/fixtures/countries.yml +1 -0
- data/test/integration/configure_test.rb +14 -11
- data/test/integration/search_test.rb +1 -0
- data/test/integration/server_test.rb +2 -2
- data/test/setup.rb +0 -3
- data/test/teardown.rb +0 -0
- data/test/test_helper.rb +1 -6
- data/ultrasphinx.gemspec +21 -7
- data/vendor/riddle/README +2 -2
- data/vendor/riddle/Rakefile +94 -0
- data/vendor/riddle/lib/riddle.rb +1 -1
- data/vendor/riddle/lib/riddle/client.rb +18 -6
- data/vendor/riddle/lib/riddle/client/filter.rb +3 -1
- data/vendor/riddle/lib/riddle/client/message.rb +1 -1
- data/vendor/riddle/lib/riddle/client/response.rb +1 -1
- data/vendor/riddle/spec/fixtures/data/anchor.bin +0 -0
- data/vendor/riddle/spec/fixtures/data/filter_floats.bin +0 -0
- data/vendor/riddle/spec/fixtures/data/filter_floats_exclude.bin +0 -0
- data/vendor/riddle/spec/sphinx_helper.rb +1 -0
- data/vendor/riddle/spec/unit/message_spec.rb +3 -3
- data/vendor/riddle/spec/unit/response_spec.rb +2 -2
- metadata +10 -5
- metadata.gz.sig +0 -0
- data/test/integration/app/config/ultrasphinx/development.conf +0 -159
- data/test/integration/app/db/schema.rb +0 -52
data/lib/ultrasphinx/search.rb
CHANGED
@@ -120,6 +120,7 @@ Note that your database is never changed by anything Ultrasphinx does.
|
|
120
120
|
self.client_options ||= HashWithIndifferentAccess.new({
|
121
121
|
:with_subtotals => false,
|
122
122
|
:ignore_missing_records => false,
|
123
|
+
:max_missing_records => 5, # Has no effect if :ignore_missing_records => false
|
123
124
|
:max_retries => 4,
|
124
125
|
:retry_sleep_time => 0.5,
|
125
126
|
:max_facets => 100,
|
@@ -2,6 +2,7 @@
|
|
2
2
|
module Ultrasphinx
|
3
3
|
class Search
|
4
4
|
module Internals
|
5
|
+
include Associations
|
5
6
|
|
6
7
|
# These methods are kept stateless to ease debugging
|
7
8
|
|
@@ -184,9 +185,10 @@ module Ultrasphinx
|
|
184
185
|
when 'fields'
|
185
186
|
[configuration['field'], ""]
|
186
187
|
when 'include'
|
188
|
+
association_model = get_association_model(klass, configuration)
|
187
189
|
# XXX Only handles the basic case. No test coverage.
|
188
190
|
["included.#{configuration['field']}",
|
189
|
-
(configuration['association_sql'] or "LEFT OUTER JOIN #{configuration['table']} AS included ON included.#{
|
191
|
+
(configuration['association_sql'] or "LEFT OUTER JOIN #{configuration['table']} AS included ON included.#{association_model.primary_key} = #{klass.table_name}.#{association_model.class_name.underscore}_id")
|
190
192
|
]
|
191
193
|
when 'concatenate'
|
192
194
|
# Wait for someone to complain before worrying about this
|
@@ -203,8 +205,8 @@ module Ultrasphinx
|
|
203
205
|
raise ConfigurationError, "no classes were correctly configured for text faceting on '#{facet}'" if configured_classes.empty?
|
204
206
|
|
205
207
|
FACET_CACHE[facet]
|
206
|
-
end
|
207
|
-
|
208
|
+
end
|
209
|
+
|
208
210
|
# Inverse-modulus map the Sphinx ids to the table-specific ids
|
209
211
|
def convert_sphinx_ids(sphinx_ids)
|
210
212
|
sphinx_ids.sort_by do |item|
|
@@ -251,6 +253,11 @@ module Ultrasphinx
|
|
251
253
|
result._metaclass.send('define_method', 'result_index') { i }
|
252
254
|
end
|
253
255
|
|
256
|
+
if ids.size - results.size > Ultrasphinx::Search.client_options['max_missing_records']
|
257
|
+
# Never reached if Ultrasphinx::Search.client_options['ignore_missing_records'] is false
|
258
|
+
raise ConfigurationError, "Too many results for this query returned ActiveRecord::RecordNotFound. The index is probably out of date"
|
259
|
+
end
|
260
|
+
|
254
261
|
results
|
255
262
|
end
|
256
263
|
|
@@ -1,9 +1,12 @@
|
|
1
1
|
|
2
2
|
module Ultrasphinx
|
3
3
|
class Search
|
4
|
-
module Parser
|
5
|
-
|
6
|
-
|
4
|
+
module Parser
|
5
|
+
# We could rewrite this in Treetop, but since it works well, what's the point? It's
|
6
|
+
# probably faster this way. Ragel would speed it up, but be too much work.
|
7
|
+
|
8
|
+
class Error < RuntimeError
|
9
|
+
end
|
7
10
|
|
8
11
|
OPERATORS = {
|
9
12
|
'OR' => '|',
|
@@ -32,7 +35,7 @@ module Ultrasphinx
|
|
32
35
|
token_hash.sort_by do |key, value|
|
33
36
|
key or ""
|
34
37
|
end.each do |field, contents|
|
35
|
-
#
|
38
|
+
# First operator always goes outside
|
36
39
|
query << contents.first.first
|
37
40
|
|
38
41
|
query << "@#{field}" if field
|
@@ -66,24 +69,24 @@ module Ultrasphinx
|
|
66
69
|
|
67
70
|
query.each_with_index do |subtoken, index|
|
68
71
|
|
69
|
-
#
|
72
|
+
# Recurse for parens, if necessary
|
70
73
|
if subtoken =~ /^(.*?)\((.*)\)(.*?$)/
|
71
74
|
subtoken = query[index] = "#{$1}(#{parse $2})#{$3}"
|
72
75
|
end
|
73
76
|
|
74
|
-
#
|
77
|
+
# Reappend missing closing quotes
|
75
78
|
if subtoken =~ /(^|\:)\"/
|
76
79
|
subtoken = subtoken.chomp('"') + '"'
|
77
80
|
end
|
78
81
|
|
79
|
-
#
|
82
|
+
# Strip parentheses within quoted strings
|
80
83
|
if subtoken =~ /\"(.*)\"/
|
81
84
|
subtoken.sub!($1, $1.gsub(/[()]/, ''))
|
82
85
|
end
|
83
86
|
|
84
87
|
# add to the stream, converting the operator
|
85
88
|
if !has_operator
|
86
|
-
if OPERATORS.to_a.flatten.include? subtoken and index != (query.size - 1) #
|
89
|
+
if OPERATORS.to_a.flatten.include? subtoken and index != (query.size - 1) # Operators at the end of the string are not parsed
|
87
90
|
token_stream << OPERATORS[subtoken] || subtoken
|
88
91
|
has_operator = true # flip
|
89
92
|
else
|
@@ -92,7 +95,7 @@ module Ultrasphinx
|
|
92
95
|
end
|
93
96
|
else
|
94
97
|
if OPERATORS.to_a.flatten.include? subtoken
|
95
|
-
#
|
98
|
+
# Drop extra operator
|
96
99
|
else
|
97
100
|
token_stream << subtoken
|
98
101
|
has_operator = false # flop
|
@@ -108,9 +111,9 @@ module Ultrasphinx
|
|
108
111
|
def token_stream_to_hash(token_stream)
|
109
112
|
token_hash = Hash.new([])
|
110
113
|
token_stream.map do |operator, content|
|
111
|
-
#
|
114
|
+
# Remove some spaces
|
112
115
|
content.gsub!(/^"\s+|\s+"$/, '"')
|
113
|
-
#
|
116
|
+
# Convert fields into sphinx style, reformat the stream object
|
114
117
|
if content =~ /(.*?):(.*)/
|
115
118
|
token_hash[$1] += [[operator, $2]]
|
116
119
|
else
|
@@ -56,13 +56,15 @@ module Ultrasphinx
|
|
56
56
|
open("#{THIS_DIR}/postgresql/#{name}.sql").read.gsub(/\s+/, ' ')
|
57
57
|
end
|
58
58
|
|
59
|
-
|
59
|
+
SQL_FUNCTIONS = {
|
60
60
|
'mysql' => {
|
61
61
|
'group_concat' => "CAST(GROUP_CONCAT(DISTINCT ? SEPARATOR ' ') AS CHAR)",
|
62
|
+
'range_cast' => "?",
|
62
63
|
'stored_procedures' => {}
|
63
64
|
},
|
64
65
|
'postgresql' => {
|
65
66
|
'group_concat' => "GROUP_CONCAT(?)",
|
67
|
+
'range_cast' => "cast(coalesce(?,1) AS integer)",
|
66
68
|
'stored_procedures' => Hash[*(
|
67
69
|
['hex_to_int', 'group_concat', 'concat_ws', 'unix_timestamp', 'crc32'].map do |name|
|
68
70
|
[name, load_stored_procedure(name)]
|
@@ -72,7 +74,7 @@ module Ultrasphinx
|
|
72
74
|
}
|
73
75
|
}
|
74
76
|
|
75
|
-
|
77
|
+
DEFAULTS = {
|
76
78
|
'mysql' => %(
|
77
79
|
type = mysql
|
78
80
|
sql_query_pre = SET SESSION group_concat_max_len = 65535
|
@@ -80,14 +82,14 @@ sql_query_pre = SET NAMES utf8
|
|
80
82
|
),
|
81
83
|
'postgresql' => %(
|
82
84
|
type = pgsql
|
83
|
-
sql_query_pre = ) +
|
85
|
+
sql_query_pre = ) + SQL_FUNCTIONS['postgresql']['stored_procedures'].values.join(' ') + %(
|
84
86
|
)
|
85
87
|
}
|
86
88
|
|
87
89
|
ADAPTER = ActiveRecord::Base.connection.instance_variable_get("@config")[:adapter] rescue 'mysql'
|
88
90
|
|
89
91
|
# Install the stored procedures
|
90
|
-
|
92
|
+
SQL_FUNCTIONS[ADAPTER]['stored_procedures'].each do |key, value|
|
91
93
|
ActiveRecord::Base.connection.execute(value)
|
92
94
|
end
|
93
95
|
|
@@ -4,5 +4,5 @@ class Geo::Address < ActiveRecord::Base
|
|
4
4
|
|
5
5
|
is_indexed 'fields' => ['name'],
|
6
6
|
'concatenate' => [{'fields' => ['line_1', 'line_2', 'city', 'province_region', 'zip_postal_code'], 'as' => 'content'}],
|
7
|
-
'include' => [{'
|
7
|
+
'include' => [{'association_name' => 'state', 'field' => 'name', 'as' => 'state'}]
|
8
8
|
end
|
@@ -1,45 +1,108 @@
|
|
1
|
-
# Don't change this file
|
1
|
+
# Don't change this file!
|
2
|
+
# Configure your app in config/environment.rb and config/environments/*.rb
|
2
3
|
|
3
|
-
unless defined?(RAILS_ROOT)
|
4
|
-
root_path = File.join(File.dirname(__FILE__), '..')
|
4
|
+
RAILS_ROOT = "#{File.dirname(__FILE__)}/.." unless defined?(RAILS_ROOT)
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
6
|
+
module Rails
|
7
|
+
class << self
|
8
|
+
def boot!
|
9
|
+
unless booted?
|
10
|
+
preinitialize
|
11
|
+
pick_boot.run
|
12
|
+
end
|
13
|
+
end
|
10
14
|
|
11
|
-
|
12
|
-
|
15
|
+
def booted?
|
16
|
+
defined? Rails::Initializer
|
17
|
+
end
|
18
|
+
|
19
|
+
def pick_boot
|
20
|
+
(vendor_rails? ? VendorBoot : GemBoot).new
|
21
|
+
end
|
22
|
+
|
23
|
+
def vendor_rails?
|
24
|
+
File.exist?("#{RAILS_ROOT}/vendor/rails")
|
25
|
+
end
|
13
26
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
else
|
18
|
-
require 'rubygems'
|
27
|
+
def preinitialize
|
28
|
+
load(preinitializer_path) if File.exists?(preinitializer_path)
|
29
|
+
end
|
19
30
|
|
20
|
-
|
21
|
-
|
22
|
-
|
31
|
+
def preinitializer_path
|
32
|
+
"#{RAILS_ROOT}/config/preinitializer.rb"
|
33
|
+
end
|
34
|
+
end
|
23
35
|
|
24
|
-
|
25
|
-
|
26
|
-
|
36
|
+
class Boot
|
37
|
+
def run
|
38
|
+
load_initializer
|
39
|
+
Rails::Initializer.run(:set_load_path)
|
40
|
+
end
|
41
|
+
end
|
27
42
|
|
28
|
-
|
29
|
-
|
30
|
-
|
43
|
+
class VendorBoot < Boot
|
44
|
+
def load_initializer
|
45
|
+
require "#{RAILS_ROOT}/vendor/rails/railties/lib/initializer"
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
class GemBoot < Boot
|
50
|
+
def load_initializer
|
51
|
+
self.class.load_rubygems
|
52
|
+
load_rails_gem
|
53
|
+
require 'initializer'
|
54
|
+
end
|
55
|
+
|
56
|
+
def load_rails_gem
|
57
|
+
if version = self.class.gem_version
|
58
|
+
gem 'rails', version
|
31
59
|
else
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
60
|
+
gem 'rails'
|
61
|
+
end
|
62
|
+
rescue Gem::LoadError => load_error
|
63
|
+
$stderr.puts %(Missing the Rails #{version} gem. Please `gem install -v=#{version} rails`, update your RAILS_GEM_VERSION setting in config/environment.rb for the Rails version you do have installed, or comment out RAILS_GEM_VERSION to use the latest version installed.)
|
64
|
+
exit 1
|
65
|
+
end
|
66
|
+
|
67
|
+
class << self
|
68
|
+
def rubygems_version
|
69
|
+
Gem::RubyGemsVersion if defined? Gem::RubyGemsVersion
|
70
|
+
end
|
71
|
+
|
72
|
+
def gem_version
|
73
|
+
if defined? RAILS_GEM_VERSION
|
74
|
+
RAILS_GEM_VERSION
|
75
|
+
elsif ENV.include?('RAILS_GEM_VERSION')
|
76
|
+
ENV['RAILS_GEM_VERSION']
|
77
|
+
else
|
78
|
+
parse_gem_version(read_environment_rb)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def load_rubygems
|
83
|
+
require 'rubygems'
|
84
|
+
|
85
|
+
unless rubygems_version >= '0.9.4'
|
86
|
+
$stderr.puts %(Rails requires RubyGems >= 0.9.4 (you have #{rubygems_version}). Please `gem update --system` and try again.)
|
87
|
+
exit 1
|
88
|
+
end
|
89
|
+
|
90
|
+
rescue LoadError
|
91
|
+
$stderr.puts %(Rails requires RubyGems >= 0.9.4. Please install RubyGems and try again: http://rubygems.rubyforge.org)
|
36
92
|
exit 1
|
37
93
|
end
|
38
|
-
|
39
|
-
|
40
|
-
|
94
|
+
|
95
|
+
def parse_gem_version(text)
|
96
|
+
$1 if text =~ /^[^#]*RAILS_GEM_VERSION\s*=\s*'([!~<>=]*\s*[\d.]+)'/
|
97
|
+
end
|
98
|
+
|
99
|
+
private
|
100
|
+
def read_environment_rb
|
101
|
+
File.read("#{RAILS_ROOT}/config/environment.rb")
|
102
|
+
end
|
41
103
|
end
|
42
104
|
end
|
43
|
-
|
44
|
-
Rails::Initializer.run(:set_load_path)
|
45
105
|
end
|
106
|
+
|
107
|
+
# All that for this:
|
108
|
+
Rails.boot!
|
@@ -1,8 +1,11 @@
|
|
1
1
|
|
2
|
+
RAILS_GEM_VERSION = ENV['MULTIRAILS_RAILS_VERSION'] if ENV['MULTIRAILS_RAILS_VERSION']
|
3
|
+
|
2
4
|
require File.join(File.dirname(__FILE__), 'boot')
|
5
|
+
require 'action_controller'
|
3
6
|
|
4
7
|
Rails::Initializer.run do |config|
|
5
|
-
config.action_controller.session = { :session_key => "_myapp_session", :secret => "
|
8
|
+
config.action_controller.session = { :session_key => "_myapp_session", :secret => "7c74979e7db2230f84adbb4b3eb77d05" }
|
6
9
|
config.load_paths << "#{RAILS_ROOT}/app/models/person" # moduleless model path
|
7
10
|
end
|
8
11
|
|
@@ -1,7 +1,7 @@
|
|
1
|
-
config.cache_classes =
|
1
|
+
config.cache_classes = ENV['PRODUCTION']
|
2
2
|
config.whiny_nils = true
|
3
3
|
config.action_controller.consider_all_requests_local = true
|
4
|
-
config.action_controller.perform_caching
|
5
|
-
config.action_view.cache_template_extensions
|
6
|
-
config.action_view.debug_rjs
|
4
|
+
config.action_controller.perform_caching = ENV['PRODUCTION']
|
5
|
+
config.action_view.cache_template_extensions = false
|
6
|
+
config.action_view.debug_rjs = true
|
7
7
|
config.action_mailer.raise_delivery_errors = false
|
@@ -1,5 +1,5 @@
|
|
1
1
|
|
2
|
-
# Auto-generated at
|
2
|
+
# Auto-generated at Sat Jan 12 08:05:26 -0500 2008.
|
3
3
|
# Hand modifications will be overwritten.
|
4
4
|
# /Users/eweaver/Desktop/projects/chow/vendor/plugins/ultrasphinx/test/integration/app/config/ultrasphinx/default.base
|
5
5
|
indexer {
|
@@ -33,8 +33,8 @@ sql_db = ultrasphinx_development
|
|
33
33
|
sql_host = localhost
|
34
34
|
sql_pass =
|
35
35
|
sql_user = root
|
36
|
-
sql_query_range = SELECT MIN(id),
|
37
|
-
sql_query = SELECT (states.id *
|
36
|
+
sql_query_range = SELECT MIN(id) , MAX(id) FROM states
|
37
|
+
sql_query = SELECT (states.id * 5 + 0) AS id, CAST(GROUP_CONCAT(DISTINCT addresses.name SEPARATOR ' ') AS CHAR) AS address_name, 0 AS capitalization, 'Geo::State' AS class, 0 AS class_id, '' AS company, '' AS company_name, 0 AS company_name_facet, '' AS company_two, '' AS content, 18000 AS created_at, 0 AS deleted, '' AS email, '' AS login, '' AS mission_statement, '' AS name, '' AS state, 0 AS user_id FROM states LEFT OUTER JOIN addresses AS addresses ON states.id = addresses.state_id WHERE states.id >= $start AND states.id <= $end GROUP BY states.id
|
38
38
|
|
39
39
|
sql_group_column = capitalization
|
40
40
|
sql_group_column = class_id
|
@@ -43,7 +43,7 @@ sql_date_column = created_at
|
|
43
43
|
sql_group_column = deleted
|
44
44
|
sql_str2ordinal_column = mission_statement
|
45
45
|
sql_group_column = user_id
|
46
|
-
sql_query_info = SELECT * FROM states WHERE states.id = (($id - 0) /
|
46
|
+
sql_query_info = SELECT * FROM states WHERE states.id = (($id - 0) / 5)
|
47
47
|
}
|
48
48
|
|
49
49
|
|
@@ -64,8 +64,8 @@ sql_db = ultrasphinx_development
|
|
64
64
|
sql_host = localhost
|
65
65
|
sql_pass =
|
66
66
|
sql_user = root
|
67
|
-
sql_query_range = SELECT MIN(id),
|
68
|
-
sql_query = SELECT (sellers.id *
|
67
|
+
sql_query_range = SELECT MIN(id) , MAX(id) FROM sellers
|
68
|
+
sql_query = SELECT (sellers.id * 5 + 1) AS id, '' AS address_name, sellers.capitalization AS capitalization, 'Seller' AS class, 1 AS class_id, '' AS company, sellers.company_name AS company_name, CRC32(sellers.company_name) AS company_name_facet, '' AS company_two, '' AS content, UNIX_TIMESTAMP(sellers.created_at) AS created_at, 0 AS deleted, '' AS email, '' AS login, sellers.mission_statement AS mission_statement, '' AS name, '' AS state, sellers.user_id AS user_id FROM sellers WHERE sellers.id >= $start AND sellers.id <= $end GROUP BY sellers.id
|
69
69
|
|
70
70
|
sql_group_column = capitalization
|
71
71
|
sql_group_column = class_id
|
@@ -74,7 +74,7 @@ sql_date_column = created_at
|
|
74
74
|
sql_group_column = deleted
|
75
75
|
sql_str2ordinal_column = mission_statement
|
76
76
|
sql_group_column = user_id
|
77
|
-
sql_query_info = SELECT * FROM sellers WHERE sellers.id = (($id - 1) /
|
77
|
+
sql_query_info = SELECT * FROM sellers WHERE sellers.id = (($id - 1) / 5)
|
78
78
|
}
|
79
79
|
|
80
80
|
|
@@ -95,8 +95,8 @@ sql_db = ultrasphinx_development
|
|
95
95
|
sql_host = localhost
|
96
96
|
sql_pass =
|
97
97
|
sql_user = root
|
98
|
-
sql_query_range = SELECT MIN(id),
|
99
|
-
sql_query = SELECT (addresses.id *
|
98
|
+
sql_query_range = SELECT MIN(id) , MAX(id) FROM addresses
|
99
|
+
sql_query = SELECT (addresses.id * 5 + 2) AS id, '' AS address_name, 0 AS capitalization, 'Geo::Address' AS class, 2 AS class_id, '' AS company, '' AS company_name, 0 AS company_name_facet, '' AS company_two, CONCAT_WS(' ', addresses.line_1, addresses.line_2, addresses.city, addresses.province_region, addresses.zip_postal_code) AS content, 18000 AS created_at, 0 AS deleted, '' AS email, '' AS login, '' AS mission_statement, addresses.name AS name, states.name AS state, 0 AS user_id FROM addresses LEFT OUTER JOIN states AS states ON states.id = addresses.state_id WHERE addresses.id >= $start AND addresses.id <= $end GROUP BY addresses.id
|
100
100
|
|
101
101
|
sql_group_column = capitalization
|
102
102
|
sql_group_column = class_id
|
@@ -105,7 +105,7 @@ sql_date_column = created_at
|
|
105
105
|
sql_group_column = deleted
|
106
106
|
sql_str2ordinal_column = mission_statement
|
107
107
|
sql_group_column = user_id
|
108
|
-
sql_query_info = SELECT * FROM addresses WHERE addresses.id = (($id - 2) /
|
108
|
+
sql_query_info = SELECT * FROM addresses WHERE addresses.id = (($id - 2) / 5)
|
109
109
|
}
|
110
110
|
|
111
111
|
|
@@ -126,8 +126,8 @@ sql_db = ultrasphinx_development
|
|
126
126
|
sql_host = localhost
|
127
127
|
sql_pass =
|
128
128
|
sql_user = root
|
129
|
-
sql_query_range = SELECT MIN(id),
|
130
|
-
sql_query = SELECT (users.id *
|
129
|
+
sql_query_range = SELECT MIN(id) , MAX(id) FROM users
|
130
|
+
sql_query = SELECT (users.id * 5 + 3) AS id, '' AS address_name, 0 AS capitalization, 'User' AS class, 3 AS class_id, sellers.company_name AS company, '' AS company_name, 0 AS company_name_facet, REPLACE(sellers_two.company_name, '6', ' replacement ') AS company_two, '' AS content, 18000 AS created_at, users.deleted AS deleted, users.email AS email, users.login AS login, '' AS mission_statement, '' AS name, '' AS state, 0 AS user_id FROM users LEFT OUTER JOIN sellers AS sellers ON users.id = sellers.user_id LEFT OUTER JOIN sellers AS sellers_two ON users.id = sellers_two.user_id WHERE users.id >= $start AND users.id <= $end AND (deleted = '0') GROUP BY users.id
|
131
131
|
|
132
132
|
sql_group_column = capitalization
|
133
133
|
sql_group_column = class_id
|
@@ -136,7 +136,38 @@ sql_date_column = created_at
|
|
136
136
|
sql_group_column = deleted
|
137
137
|
sql_str2ordinal_column = mission_statement
|
138
138
|
sql_group_column = user_id
|
139
|
-
sql_query_info = SELECT * FROM users WHERE users.id = (($id - 3) /
|
139
|
+
sql_query_info = SELECT * FROM users WHERE users.id = (($id - 3) / 5)
|
140
|
+
}
|
141
|
+
|
142
|
+
|
143
|
+
# Source configuration
|
144
|
+
|
145
|
+
source geo__countries
|
146
|
+
{
|
147
|
+
strip_html = 0
|
148
|
+
sql_range_step = 20000
|
149
|
+
index_html_attrs =
|
150
|
+
sql_query_post =
|
151
|
+
|
152
|
+
type = mysql
|
153
|
+
sql_query_pre = SET SESSION group_concat_max_len = 65535
|
154
|
+
sql_query_pre = SET NAMES utf8
|
155
|
+
|
156
|
+
sql_db = ultrasphinx_development
|
157
|
+
sql_host = localhost
|
158
|
+
sql_pass =
|
159
|
+
sql_user = root
|
160
|
+
sql_query_range = SELECT MIN(id) , MAX(id) FROM countries
|
161
|
+
sql_query = SELECT (countries.id * 5 + 4) AS id, '' AS address_name, 0 AS capitalization, 'Geo::Country' AS class, 4 AS class_id, '' AS company, '' AS company_name, 0 AS company_name_facet, '' AS company_two, '' AS content, 18000 AS created_at, 0 AS deleted, '' AS email, '' AS login, '' AS mission_statement, countries.name AS name, '' AS state, 0 AS user_id FROM countries WHERE countries.id >= $start AND countries.id <= $end GROUP BY countries.id
|
162
|
+
|
163
|
+
sql_group_column = capitalization
|
164
|
+
sql_group_column = class_id
|
165
|
+
sql_group_column = company_name_facet
|
166
|
+
sql_date_column = created_at
|
167
|
+
sql_group_column = deleted
|
168
|
+
sql_str2ordinal_column = mission_statement
|
169
|
+
sql_group_column = user_id
|
170
|
+
sql_query_info = SELECT * FROM countries WHERE countries.id = (($id - 4) / 5)
|
140
171
|
}
|
141
172
|
|
142
173
|
|
@@ -145,6 +176,7 @@ sql_query_info = SELECT * FROM users WHERE users.id = (($id - 3) / 4)
|
|
145
176
|
index complete
|
146
177
|
{
|
147
178
|
source = geo__addresses
|
179
|
+
source = geo__countries
|
148
180
|
source = geo__states
|
149
181
|
source = sellers
|
150
182
|
source = users
|