ultrasphinx 1.6.7 → 1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|