riddle 1.0.12 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/riddle/client.rb +6 -1
- data/lib/riddle/configuration.rb +1 -0
- data/lib/riddle/configuration/index.rb +15 -14
- data/lib/riddle/configuration/indexer.rb +1 -1
- data/lib/riddle/configuration/realtime_index.rb +39 -0
- data/lib/riddle/configuration/searchd.rb +3 -1
- data/lib/riddle/configuration/sql_source.rb +26 -18
- data/lib/riddle/controller.rb +3 -1
- data/spec/unit/configuration/realtime_index_spec.rb +65 -0
- metadata +7 -4
data/lib/riddle/client.rb
CHANGED
@@ -5,6 +5,7 @@ require 'riddle/client/response'
|
|
5
5
|
module Riddle
|
6
6
|
class VersionError < StandardError; end
|
7
7
|
class ResponseError < StandardError; end
|
8
|
+
class OutOfBoundsError < StandardError; end
|
8
9
|
|
9
10
|
# This class was heavily based on the existing Client API by Dmytro Shteflyuk
|
10
11
|
# and Alexy Kovyrin. Their code worked fine, I just wanted something a bit
|
@@ -529,6 +530,8 @@ module Riddle
|
|
529
530
|
self.connection.call(self)
|
530
531
|
elsif self.class.connection
|
531
532
|
self.class.connection.call(self)
|
533
|
+
elsif @server.index('/') == 0
|
534
|
+
UNIXSocket.new @server
|
532
535
|
else
|
533
536
|
TCPSocket.new @server, @port
|
534
537
|
end
|
@@ -598,7 +601,9 @@ module Riddle
|
|
598
601
|
puts response[4, length]
|
599
602
|
response[4 + length, response.length - 4 - length]
|
600
603
|
when Statuses[:error], Statuses[:retry]
|
601
|
-
|
604
|
+
message = response[4, response.length - 4]
|
605
|
+
klass = message[/out of bounds/] ? OutOfBoundsError : ResponseError
|
606
|
+
raise klass, "searchd error (status: #{status}): #{message}"
|
602
607
|
else
|
603
608
|
raise ResponseError, "Unknown searchd error (status: #{status})"
|
604
609
|
end
|
data/lib/riddle/configuration.rb
CHANGED
@@ -3,6 +3,7 @@ require 'riddle/configuration/section'
|
|
3
3
|
require 'riddle/configuration/distributed_index'
|
4
4
|
require 'riddle/configuration/index'
|
5
5
|
require 'riddle/configuration/indexer'
|
6
|
+
require 'riddle/configuration/realtime_index'
|
6
7
|
require 'riddle/configuration/remote_index'
|
7
8
|
require 'riddle/configuration/searchd'
|
8
9
|
require 'riddle/configuration/source'
|
@@ -1,27 +1,28 @@
|
|
1
1
|
module Riddle
|
2
2
|
class Configuration
|
3
3
|
class Index < Riddle::Configuration::Section
|
4
|
-
self.settings = [:source, :path, :docinfo, :mlock, :morphology,
|
4
|
+
self.settings = [:type, :source, :path, :docinfo, :mlock, :morphology,
|
5
5
|
:min_stemming_len, :stopwords, :wordforms, :exceptions, :min_word_len,
|
6
6
|
:charset_dictpath, :charset_type, :charset_table, :ignore_chars,
|
7
7
|
:min_prefix_len, :min_infix_len, :prefix_fields, :infix_fields,
|
8
|
-
:enable_star, :
|
9
|
-
:phrase_boundary_step, :
|
10
|
-
:html_remove_elements, :preopen, :ondisk_dict,
|
11
|
-
:
|
12
|
-
:
|
13
|
-
:stopwords_step]
|
8
|
+
:enable_star, :expand_keywords, :ngram_len, :ngram_chars,
|
9
|
+
:phrase_boundary, :phrase_boundary_step, :blend_chars, :html_strip,
|
10
|
+
:html_index_attrs, :html_remove_elements, :preopen, :ondisk_dict,
|
11
|
+
:inplace_enable, :inplace_hit_gap, :inplace_docinfo_gap,
|
12
|
+
:inplace_reloc_factor, :inplace_write_factor, :index_exact_words,
|
13
|
+
:overshort_step, :stopwords_step, :hitless_words]
|
14
14
|
|
15
|
-
attr_accessor :name, :parent, :sources, :path, :docinfo, :mlock,
|
15
|
+
attr_accessor :name, :parent, :type, :sources, :path, :docinfo, :mlock,
|
16
16
|
:morphologies, :min_stemming_len, :stopword_files, :wordform_files,
|
17
17
|
:exception_files, :min_word_len, :charset_dictpath, :charset_type,
|
18
18
|
:charset_table, :ignore_characters, :min_prefix_len, :min_infix_len,
|
19
|
-
:prefix_field_names, :infix_field_names, :enable_star, :
|
20
|
-
:
|
21
|
-
:
|
22
|
-
:
|
23
|
-
:
|
24
|
-
:
|
19
|
+
:prefix_field_names, :infix_field_names, :enable_star, :expand_keywords,
|
20
|
+
:ngram_len, :ngram_characters, :phrase_boundaries,
|
21
|
+
:phrase_boundary_step, :blend_chars, :html_strip, :html_index_attrs,
|
22
|
+
:html_remove_element_tags, :preopen, :ondisk_dict, :inplace_enable,
|
23
|
+
:inplace_hit_gap, :inplace_docinfo_gap, :inplace_reloc_factor,
|
24
|
+
:inplace_write_factor, :index_exact_words, :overshort_step,
|
25
|
+
:stopwords_step, :hitless_words
|
25
26
|
|
26
27
|
def initialize(name, *sources)
|
27
28
|
@name = name
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module Riddle
|
2
|
+
class Configuration
|
3
|
+
class RealtimeIndex < Riddle::Configuration::Section
|
4
|
+
self.settings = [:type, :path, :rt_mem_limit, :rt_field, :rt_attr_uint,
|
5
|
+
:rt_attr_bigint, :rt_attr_float, :rt_attr_timestamp, :rt_attr_string]
|
6
|
+
|
7
|
+
attr_accessor :name
|
8
|
+
attr_accessor *self.settings
|
9
|
+
|
10
|
+
def initialize(name)
|
11
|
+
@name = name
|
12
|
+
@rt_field = []
|
13
|
+
@rt_attr_uint = []
|
14
|
+
@rt_attr_bigint = []
|
15
|
+
@rt_attr_float = []
|
16
|
+
@rt_attr_timestamp = []
|
17
|
+
@rt_attr_string = []
|
18
|
+
end
|
19
|
+
|
20
|
+
def type
|
21
|
+
"rt"
|
22
|
+
end
|
23
|
+
|
24
|
+
def valid?
|
25
|
+
!(@name.nil? || @path.nil?)
|
26
|
+
end
|
27
|
+
|
28
|
+
def render
|
29
|
+
raise ConfigurationError unless valid?
|
30
|
+
|
31
|
+
(
|
32
|
+
["index #{name}", "{"] +
|
33
|
+
settings_body +
|
34
|
+
["}", ""]
|
35
|
+
).join("\n")
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -6,7 +6,9 @@ module Riddle
|
|
6
6
|
:seamless_rotate, :preopen_indexes, :unlink_old, :attr_flush_period,
|
7
7
|
:ondisk_dict_default, :max_packet_size, :mva_updates_pool,
|
8
8
|
:crash_log_path, :max_filters, :max_filter_values, :listen_backlog,
|
9
|
-
:read_buffer, :read_unhinted
|
9
|
+
:read_buffer, :read_unhinted, :max_batch_queries, :subtree_docs_cache,
|
10
|
+
:subtree_hits_cache, :workers, :dist_threads, :binlog_path,
|
11
|
+
:binlog_flush, :binlog_max_log_size]
|
10
12
|
|
11
13
|
attr_accessor *self.settings
|
12
14
|
|
@@ -4,12 +4,14 @@ module Riddle
|
|
4
4
|
self.settings = [:type, :sql_host, :sql_user, :sql_pass, :sql_db,
|
5
5
|
:sql_port, :sql_sock, :mysql_connect_flags, :mysql_ssl_cert,
|
6
6
|
:mysql_ssl_key, :mysql_ssl_ca, :odbc_dsn, :sql_query_pre, :sql_query,
|
7
|
-
:
|
8
|
-
:
|
9
|
-
:
|
10
|
-
:
|
11
|
-
:
|
12
|
-
:
|
7
|
+
:sql_joined_field, :sql_file_field, :sql_query_range, :sql_range_step,
|
8
|
+
:sql_query_killlist, :sql_attr_uint, :sql_attr_bool, :sql_attr_bigint,
|
9
|
+
:sql_attr_timestamp, :sql_attr_str2ordinal, :sql_attr_float,
|
10
|
+
:sql_attr_multi, :sql_attr_string, :sql_attr_str2wordcount,
|
11
|
+
:sql_field_string, :sql_field_str2wordcount, :sql_query_post,
|
12
|
+
:sql_query_post_index, :sql_ranged_throttle, :sql_query_info,
|
13
|
+
:mssql_winauth, :mssql_unicode, :unpack_zlib, :unpack_mysqlcompress,
|
14
|
+
:unpack_mysqlcompress_maxsize]
|
13
15
|
|
14
16
|
attr_accessor *self.settings
|
15
17
|
|
@@ -17,18 +19,24 @@ module Riddle
|
|
17
19
|
@name = name
|
18
20
|
@type = type
|
19
21
|
|
20
|
-
@sql_query_pre
|
21
|
-
@
|
22
|
-
@
|
23
|
-
@
|
24
|
-
@
|
25
|
-
@
|
26
|
-
@
|
27
|
-
@
|
28
|
-
@
|
29
|
-
@
|
30
|
-
@
|
31
|
-
@
|
22
|
+
@sql_query_pre = []
|
23
|
+
@sql_joined_field = []
|
24
|
+
@sql_file_field = []
|
25
|
+
@sql_attr_uint = []
|
26
|
+
@sql_attr_bool = []
|
27
|
+
@sql_attr_bigint = []
|
28
|
+
@sql_attr_timestamp = []
|
29
|
+
@sql_attr_str2ordinal = []
|
30
|
+
@sql_attr_float = []
|
31
|
+
@sql_attr_multi = []
|
32
|
+
@sql_attr_string = []
|
33
|
+
@sql_attr_str2wordcount = []
|
34
|
+
@sql_field_string = []
|
35
|
+
@sql_field_str2wordcount = []
|
36
|
+
@sql_query_post = []
|
37
|
+
@sql_query_post_index = []
|
38
|
+
@unpack_zlib = []
|
39
|
+
@unpack_mysqlcompress = []
|
32
40
|
end
|
33
41
|
|
34
42
|
def valid?
|
data/lib/riddle/controller.rb
CHANGED
@@ -0,0 +1,65 @@
|
|
1
|
+
require 'spec/spec_helper'
|
2
|
+
|
3
|
+
describe Riddle::Configuration::RealtimeIndex do
|
4
|
+
let(:index) { Riddle::Configuration::RealtimeIndex.new('rt1') }
|
5
|
+
|
6
|
+
describe '#valid?' do
|
7
|
+
it "should not be valid without a name" do
|
8
|
+
index.name = nil
|
9
|
+
index.path = 'foo'
|
10
|
+
index.should_not be_valid
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should not be valid without a path" do
|
14
|
+
index.path = nil
|
15
|
+
index.should_not be_valid
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should be valid with a name and path" do
|
19
|
+
index.path = 'foo'
|
20
|
+
index.should be_valid
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe '#type' do
|
25
|
+
it "should be 'rt'" do
|
26
|
+
index.type.should == 'rt'
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe '#render' do
|
31
|
+
it "should raise a ConfigurationError if rendering when not valid" do
|
32
|
+
lambda {
|
33
|
+
index.render
|
34
|
+
}.should raise_error(Riddle::Configuration::ConfigurationError)
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should render correctly if supplied settings are valid" do
|
38
|
+
index.path = '/var/data/rt'
|
39
|
+
index.rt_mem_limit = '512M'
|
40
|
+
index.rt_field << 'title' << 'content'
|
41
|
+
|
42
|
+
index.rt_attr_uint << 'gid'
|
43
|
+
index.rt_attr_bigint << 'guid'
|
44
|
+
index.rt_attr_float << 'gpa'
|
45
|
+
index.rt_attr_timestamp << 'ts_added'
|
46
|
+
index.rt_attr_string << 'author'
|
47
|
+
|
48
|
+
index.render.should == <<-RTINDEX
|
49
|
+
index rt1
|
50
|
+
{
|
51
|
+
type = rt
|
52
|
+
path = /var/data/rt
|
53
|
+
rt_mem_limit = 512M
|
54
|
+
rt_field = title
|
55
|
+
rt_field = content
|
56
|
+
rt_attr_uint = gid
|
57
|
+
rt_attr_bigint = guid
|
58
|
+
rt_attr_float = gpa
|
59
|
+
rt_attr_timestamp = ts_added
|
60
|
+
rt_attr_string = author
|
61
|
+
}
|
62
|
+
RTINDEX
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: riddle
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 19
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 1
|
8
|
+
- 1
|
8
9
|
- 0
|
9
|
-
|
10
|
-
version: 1.0.12
|
10
|
+
version: 1.1.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Pat Allan
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-
|
18
|
+
date: 2010-08-29 00:00:00 +09:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -75,6 +75,7 @@ files:
|
|
75
75
|
- lib/riddle/configuration/distributed_index.rb
|
76
76
|
- lib/riddle/configuration/index.rb
|
77
77
|
- lib/riddle/configuration/indexer.rb
|
78
|
+
- lib/riddle/configuration/realtime_index.rb
|
78
79
|
- lib/riddle/configuration/remote_index.rb
|
79
80
|
- lib/riddle/configuration/searchd.rb
|
80
81
|
- lib/riddle/configuration/section.rb
|
@@ -100,6 +101,7 @@ files:
|
|
100
101
|
- spec/unit/configuration/distributed_index_spec.rb
|
101
102
|
- spec/unit/configuration/index_spec.rb
|
102
103
|
- spec/unit/configuration/indexer_spec.rb
|
104
|
+
- spec/unit/configuration/realtime_index_spec.rb
|
103
105
|
- spec/unit/configuration/searchd_spec.rb
|
104
106
|
- spec/unit/configuration/source_spec.rb
|
105
107
|
- spec/unit/configuration/sql_source_spec.rb
|
@@ -162,6 +164,7 @@ test_files:
|
|
162
164
|
- spec/unit/configuration/distributed_index_spec.rb
|
163
165
|
- spec/unit/configuration/index_spec.rb
|
164
166
|
- spec/unit/configuration/indexer_spec.rb
|
167
|
+
- spec/unit/configuration/realtime_index_spec.rb
|
165
168
|
- spec/unit/configuration/searchd_spec.rb
|
166
169
|
- spec/unit/configuration/source_spec.rb
|
167
170
|
- spec/unit/configuration/sql_source_spec.rb
|