tire 0.3.8 → 0.3.9
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/examples/tire-dsl.rb +1 -0
- data/lib/tire/results/collection.rb +8 -6
- data/lib/tire/search.rb +0 -2
- data/lib/tire/search/query.rb +41 -0
- data/lib/tire/version.rb +3 -6
- data/test/integration/custom_score_queries_test.rb +88 -0
- data/test/integration/facets_test.rb +24 -6
- data/test/integration/filtered_queries_test.rb +47 -0
- data/test/unit/search_facet_test.rb +8 -0
- data/test/unit/search_query_test.rb +65 -4
- metadata +144 -226
data/examples/tire-dsl.rb
CHANGED
@@ -477,6 +477,7 @@ end
|
|
477
477
|
# * [term](http://elasticsearch.org/guide/reference/query-dsl/term-query.html)
|
478
478
|
# * [terms](http://elasticsearch.org/guide/reference/query-dsl/terms-query.html)
|
479
479
|
# * [bool](http://www.elasticsearch.org/guide/reference/query-dsl/bool-query.html)
|
480
|
+
# * [custom_score](http://www.elasticsearch.org/guide/reference/query-dsl/custom-score-query.html)
|
480
481
|
# * [all](http://www.elasticsearch.org/guide/reference/query-dsl/match-all-query.html)
|
481
482
|
# * [ids](http://www.elasticsearch.org/guide/reference/query-dsl/ids-query.html)
|
482
483
|
|
@@ -13,15 +13,17 @@ module Tire
|
|
13
13
|
@time = response['took'].to_i
|
14
14
|
@total = response['hits']['total'].to_i
|
15
15
|
@facets = response['facets']
|
16
|
-
@wrapper = Configuration.wrapper
|
16
|
+
@wrapper = options[:wrapper] || Configuration.wrapper
|
17
17
|
end
|
18
18
|
|
19
19
|
def results
|
20
20
|
@results ||= begin
|
21
|
+
hits = @response['hits']['hits']
|
21
22
|
unless @options[:load]
|
22
|
-
@
|
23
|
-
|
24
|
-
|
23
|
+
if @wrapper == Hash
|
24
|
+
hits
|
25
|
+
else
|
26
|
+
hits.map do |h|
|
25
27
|
document = {}
|
26
28
|
|
27
29
|
# Update the document with content and ID
|
@@ -33,10 +35,10 @@ module Tire
|
|
33
35
|
|
34
36
|
# Return an instance of the "wrapper" class
|
35
37
|
@wrapper.new(document)
|
36
|
-
|
38
|
+
end
|
37
39
|
end
|
38
40
|
else
|
39
|
-
return [] if
|
41
|
+
return [] if hits.empty?
|
40
42
|
|
41
43
|
type = @response['hits']['hits'].first['_type']
|
42
44
|
raise NoMethodError, "You have tried to eager load the model instances, " +
|
data/lib/tire/search.rb
CHANGED
@@ -13,8 +13,6 @@ module Tire
|
|
13
13
|
|
14
14
|
@url = Configuration.url+['/', @indices.join(','), @type, '_search'].compact.join('/').squeeze('/')
|
15
15
|
|
16
|
-
# TODO: Do not allow changing the wrapper here or set it back after yield
|
17
|
-
Configuration.wrapper @options[:wrapper] if @options[:wrapper]
|
18
16
|
block.arity < 1 ? instance_eval(&block) : block.call(self) if block_given?
|
19
17
|
end
|
20
18
|
|
data/lib/tire/search/query.rb
CHANGED
@@ -28,6 +28,13 @@ module Tire
|
|
28
28
|
@value
|
29
29
|
end
|
30
30
|
|
31
|
+
def custom_score(options={}, &block)
|
32
|
+
@custom_score ||= Query.new(&block)
|
33
|
+
@value[:custom_score] = options
|
34
|
+
@value[:custom_score].update({:query => @custom_score.to_hash})
|
35
|
+
@value
|
36
|
+
end
|
37
|
+
|
31
38
|
def boolean(options={}, &block)
|
32
39
|
@boolean ||= BooleanQuery.new(options)
|
33
40
|
block.arity < 1 ? @boolean.instance_eval(&block) : block.call(@boolean) if block_given?
|
@@ -35,6 +42,13 @@ module Tire
|
|
35
42
|
@value
|
36
43
|
end
|
37
44
|
|
45
|
+
def filtered(&block)
|
46
|
+
@filtered = FilteredQuery.new
|
47
|
+
block.arity < 1 ? @filtered.instance_eval(&block) : block.call(@filtered) if block_given?
|
48
|
+
@value[:filtered] = @filtered.to_hash
|
49
|
+
@value
|
50
|
+
end
|
51
|
+
|
38
52
|
def all
|
39
53
|
@value = { :match_all => {} }
|
40
54
|
@value
|
@@ -94,5 +108,32 @@ module Tire
|
|
94
108
|
end
|
95
109
|
end
|
96
110
|
|
111
|
+
|
112
|
+
class FilteredQuery
|
113
|
+
def initialize(&block)
|
114
|
+
@value = {}
|
115
|
+
block.arity < 1 ? self.instance_eval(&block) : block.call(self) if block_given?
|
116
|
+
end
|
117
|
+
|
118
|
+
def query(options={}, &block)
|
119
|
+
@value[:query] = Query.new(&block).to_hash
|
120
|
+
@value
|
121
|
+
end
|
122
|
+
|
123
|
+
def filter(type, *options)
|
124
|
+
@value[:filter] ||= []
|
125
|
+
@value[:filter] << Filter.new(type, *options).to_hash
|
126
|
+
@value
|
127
|
+
end
|
128
|
+
|
129
|
+
def to_hash
|
130
|
+
@value
|
131
|
+
end
|
132
|
+
|
133
|
+
def to_json
|
134
|
+
to_hash.to_json
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
97
138
|
end
|
98
139
|
end
|
data/lib/tire/version.rb
CHANGED
@@ -1,13 +1,10 @@
|
|
1
1
|
module Tire
|
2
|
-
VERSION = "0.3.
|
2
|
+
VERSION = "0.3.9"
|
3
3
|
|
4
4
|
CHANGELOG =<<-END
|
5
5
|
IMPORTANT CHANGES LATELY:
|
6
6
|
|
7
|
-
*
|
8
|
-
*
|
9
|
-
* Display correct exception on request failure
|
10
|
-
* Added support for range queries
|
11
|
-
* Added support for mapping options
|
7
|
+
* Added support for filtered queries [#134]
|
8
|
+
* Added support for "custom_score" queries [#133]
|
12
9
|
END
|
13
10
|
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Tire
|
4
|
+
|
5
|
+
class CustomScoreQueriesIntegrationTest < Test::Unit::TestCase
|
6
|
+
include Test::Integration
|
7
|
+
|
8
|
+
context "Custom score queries" do
|
9
|
+
|
10
|
+
should "allow to define custom score queries (base score on field value)" do
|
11
|
+
s = Tire.search('articles-test') do
|
12
|
+
query do
|
13
|
+
# Give longer documents higher score
|
14
|
+
#
|
15
|
+
custom_score :script => "1.0 / doc['words'].value" do
|
16
|
+
string "title:T*"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
assert_equal 2, s.results.size
|
22
|
+
assert_equal ['Two', 'Three'], s.results.map(&:title)
|
23
|
+
|
24
|
+
assert s.results[0]._score > 0
|
25
|
+
assert s.results[1]._score > 0
|
26
|
+
assert s.results[0]._score > s.results[1]._score
|
27
|
+
end
|
28
|
+
|
29
|
+
should "allow to manipulate the default score (boost recent)" do
|
30
|
+
s = Tire.search('articles-test') do
|
31
|
+
query do
|
32
|
+
# Boost recent documents
|
33
|
+
#
|
34
|
+
custom_score :script => "_score + ( doc['published_on'].date.getMillis() / time() )" do
|
35
|
+
string 'title:F*'
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
assert_equal 2, s.results.size
|
41
|
+
assert_equal ['Five', 'Four'], s.results.map(&:title)
|
42
|
+
|
43
|
+
assert s.results[0]._score > 1
|
44
|
+
assert s.results[1]._score > 1
|
45
|
+
end
|
46
|
+
|
47
|
+
should "allow to define arbitrary custom scoring" do
|
48
|
+
s = Tire.search('articles-test') do
|
49
|
+
query do
|
50
|
+
# Replace documents score with the count of characters in their title
|
51
|
+
#
|
52
|
+
custom_score :script => "doc['title'].value.length()" do
|
53
|
+
string "title:T*"
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
assert_equal 2, s.results.size
|
59
|
+
assert_equal ['Three', 'Two'], s.results.map(&:title)
|
60
|
+
|
61
|
+
assert_equal 5.0, s.results[0]._score
|
62
|
+
assert_equal 3.0, s.results[1]._score
|
63
|
+
end
|
64
|
+
|
65
|
+
should "allow to pass parameters to the script" do
|
66
|
+
s = Tire.search('articles-test') do
|
67
|
+
query do
|
68
|
+
# Replace documents score with parameterized computation
|
69
|
+
#
|
70
|
+
custom_score :script => "doc['words'].doubleValue / max(a, b)",
|
71
|
+
:params => { :a => 1, :b => 2 } do
|
72
|
+
string "title:T*"
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
assert_equal 2, s.results.size
|
78
|
+
assert_equal ['Three', 'Two'], s.results.map(&:title)
|
79
|
+
|
80
|
+
assert_equal 187.5, s.results[0]._score
|
81
|
+
assert_equal 125.0, s.results[1]._score
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
85
|
+
|
86
|
+
end
|
87
|
+
|
88
|
+
end
|
@@ -26,12 +26,8 @@ module Tire
|
|
26
26
|
q = 'tags:ruby'
|
27
27
|
s = Tire.search('articles-test') do
|
28
28
|
query { string q }
|
29
|
-
facet
|
30
|
-
|
31
|
-
end
|
32
|
-
facet 'global-tags', :global => true do
|
33
|
-
terms :tags
|
34
|
-
end
|
29
|
+
facet('scoped-tags') { terms :tags }
|
30
|
+
facet('global-tags', :global => true) { terms :tags }
|
35
31
|
end
|
36
32
|
|
37
33
|
scoped_facets = s.results.facets['scoped-tags']['terms']
|
@@ -41,6 +37,28 @@ module Tire
|
|
41
37
|
assert_equal 5, global_facets.count
|
42
38
|
end
|
43
39
|
|
40
|
+
should "allow to define multiple facets" do
|
41
|
+
s = Tire.search('articles-test') do
|
42
|
+
facet('tags') { terms :tags }
|
43
|
+
facet('date') { date :published_on }
|
44
|
+
end
|
45
|
+
|
46
|
+
assert_equal 2, s.results.facets.size
|
47
|
+
end
|
48
|
+
|
49
|
+
should "allow to restrict facets with filters" do
|
50
|
+
s = Tire.search('articles-test') do
|
51
|
+
query { string 'tags:ruby' }
|
52
|
+
facet('tags', :facet_filter => { :range => { :published_on => { :from => '2011-01-01', :to => '2011-01-01' } } }) do
|
53
|
+
terms :tags
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
assert_equal 1, s.results.facets.size
|
58
|
+
assert_equal 'ruby', s.results.facets['tags']['terms'].first['term']
|
59
|
+
assert_equal 1, s.results.facets['tags']['terms'].first['count'].to_i
|
60
|
+
end
|
61
|
+
|
44
62
|
context "date histogram" do
|
45
63
|
|
46
64
|
should "return aggregated values for all results" do
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Tire
|
4
|
+
|
5
|
+
class FilteredQueriesIntegrationTest < Test::Unit::TestCase
|
6
|
+
include Test::Integration
|
7
|
+
|
8
|
+
context "Filtered queries" do
|
9
|
+
|
10
|
+
should "restrict the results" do
|
11
|
+
# 2.json > Begins with "T" and is tagged "ruby"
|
12
|
+
|
13
|
+
s = Tire.search('articles-test') do
|
14
|
+
query do
|
15
|
+
filtered do
|
16
|
+
query { string 'title:T*' }
|
17
|
+
filter :terms, :tags => ['ruby']
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
assert_equal 1, s.results.count
|
23
|
+
assert_equal 'Two', s.results.first.title
|
24
|
+
end
|
25
|
+
|
26
|
+
should "restrict the results with multiple filters" do
|
27
|
+
# 2.json > Is tagged "ruby" and has 250 words
|
28
|
+
|
29
|
+
s = Tire.search('articles-test') do
|
30
|
+
query do
|
31
|
+
filtered do
|
32
|
+
query { all }
|
33
|
+
filter :and, { :terms => { :tags => ['ruby', 'python'] } },
|
34
|
+
{ :range => { :words => { :from => '250', :to => '250' } } }
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
assert_equal 1, s.results.count
|
40
|
+
assert_equal 'Two', s.results.first.title
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
@@ -22,6 +22,14 @@ module Tire::Search
|
|
22
22
|
Facet.new('foo', :global => true).terms(:bar).to_json )
|
23
23
|
end
|
24
24
|
|
25
|
+
should "pass options to facets" do
|
26
|
+
payload = Facet.new('foo', :facet_filter => { :term => { :account_id => 'foo' } }).terms(:bar).to_hash
|
27
|
+
|
28
|
+
assert_not_nil payload['foo'][:facet_filter]
|
29
|
+
assert_equal( { :term => { :account_id => 'foo' } },
|
30
|
+
payload['foo'][:facet_filter] )
|
31
|
+
end
|
32
|
+
|
25
33
|
should "encode facet options" do
|
26
34
|
assert_equal( { :foo => { :terms => {:field=>'bar',:size=>5,:all_terms=>false} } }.to_json,
|
27
35
|
Facet.new('foo').terms(:bar, :size => 5).to_json )
|
@@ -58,6 +58,24 @@ module Tire::Search
|
|
58
58
|
Query.new.string('foo', :fields => ['title.*'], :use_dis_max => true) )
|
59
59
|
end
|
60
60
|
|
61
|
+
should "allow to set script for custom score queries" do
|
62
|
+
query = Query.new.custom_score(:script => "_score * doc['price'].value") do
|
63
|
+
string 'foo'
|
64
|
+
end
|
65
|
+
|
66
|
+
assert_equal "_score * doc['price'].value", query[:custom_score][:script]
|
67
|
+
end
|
68
|
+
|
69
|
+
should "allow to pass parameters for custom score queries" do
|
70
|
+
query = Query.new.custom_score(:script => "_score * doc['price'].value / max(a, b)",
|
71
|
+
:params => { :a => 1, :b => 2 }) do
|
72
|
+
string 'foo'
|
73
|
+
end
|
74
|
+
|
75
|
+
assert_equal 1, query[:custom_score][:params][:a]
|
76
|
+
assert_equal 2, query[:custom_score][:params][:b]
|
77
|
+
end
|
78
|
+
|
61
79
|
should "search for all documents" do
|
62
80
|
assert_equal( { :match_all => { } }, Query.new.all )
|
63
81
|
end
|
@@ -118,11 +136,11 @@ module Tire::Search
|
|
118
136
|
end
|
119
137
|
|
120
138
|
should "allow passing variables from outer scope" do
|
121
|
-
q1 = 'foo'
|
122
|
-
q2 = 'bar'
|
139
|
+
@q1 = 'foo'
|
140
|
+
@q2 = 'bar'
|
123
141
|
query = Query.new.boolean do |boolean|
|
124
|
-
boolean.must { |query| query.string q1 }
|
125
|
-
boolean.must { |query| query.string q2 }
|
142
|
+
boolean.must { |query| query.string @q1 }
|
143
|
+
boolean.must { |query| query.string @q2 }
|
126
144
|
end
|
127
145
|
|
128
146
|
assert_equal( 2, query[:bool][:must].size, query[:bool][:must].inspect )
|
@@ -132,6 +150,49 @@ module Tire::Search
|
|
132
150
|
|
133
151
|
end
|
134
152
|
|
153
|
+
|
154
|
+
context "FilteredQuery" do
|
155
|
+
|
156
|
+
should "not raise an error when no block is given" do
|
157
|
+
assert_nothing_raised { Query.new.filtered }
|
158
|
+
end
|
159
|
+
|
160
|
+
should "properly encode filter" do
|
161
|
+
query = Query.new.filtered do
|
162
|
+
query { term :foo, 'bar' }
|
163
|
+
filter :terms, :tags => ['ruby']
|
164
|
+
end
|
165
|
+
|
166
|
+
assert_equal( { :term => { :foo => 'bar' } }, query[:filtered][:query].to_hash )
|
167
|
+
assert_equal( { :tags => ['ruby'] }, query[:filtered][:filter].first[:terms] )
|
168
|
+
end
|
169
|
+
|
170
|
+
should "properly encode multiple filters" do
|
171
|
+
query = Query.new.filtered do
|
172
|
+
query { term :foo, 'bar' }
|
173
|
+
filter :terms, :tags => ['ruby']
|
174
|
+
filter :terms, :tags => ['python']
|
175
|
+
end
|
176
|
+
|
177
|
+
assert_equal 2, query[:filtered][:filter].size
|
178
|
+
assert_equal( { :tags => ['ruby'] }, query[:filtered][:filter].first[:terms] )
|
179
|
+
assert_equal( { :tags => ['python'] }, query[:filtered][:filter].last[:terms] )
|
180
|
+
end
|
181
|
+
|
182
|
+
should "allow passing variables from outer scope" do
|
183
|
+
@my_query = 'bar'
|
184
|
+
@my_filter = { :tags => ['ruby'] }
|
185
|
+
|
186
|
+
query = Query.new.filtered do |f|
|
187
|
+
f.query { |q| q.term :foo, @my_query }
|
188
|
+
f.filter :terms, @my_filter
|
189
|
+
end
|
190
|
+
|
191
|
+
assert_equal( { :term => { :foo => 'bar' } }, query[:filtered][:query].to_hash )
|
192
|
+
assert_equal( { :tags => ['ruby'] }, query[:filtered][:filter].first[:terms] )
|
193
|
+
end
|
194
|
+
|
195
|
+
end
|
135
196
|
end
|
136
197
|
|
137
198
|
end
|
metadata
CHANGED
@@ -1,257 +1,196 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: tire
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.3.9
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 3
|
9
|
-
- 8
|
10
|
-
version: 0.3.8
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Karel Minarik
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
dependencies:
|
21
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2011-10-30 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
22
15
|
name: rake
|
23
|
-
|
24
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: &70250440988100 !ruby/object:Gem::Requirement
|
25
17
|
none: false
|
26
|
-
requirements:
|
18
|
+
requirements:
|
27
19
|
- - ~>
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
hash: 63
|
30
|
-
segments:
|
31
|
-
- 0
|
32
|
-
- 9
|
33
|
-
- 2
|
20
|
+
- !ruby/object:Gem::Version
|
34
21
|
version: 0.9.2
|
35
22
|
type: :runtime
|
36
|
-
version_requirements: *id001
|
37
|
-
- !ruby/object:Gem::Dependency
|
38
|
-
name: rest-client
|
39
23
|
prerelease: false
|
40
|
-
|
24
|
+
version_requirements: *70250440988100
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rest-client
|
27
|
+
requirement: &70250440987640 !ruby/object:Gem::Requirement
|
41
28
|
none: false
|
42
|
-
requirements:
|
29
|
+
requirements:
|
43
30
|
- - ~>
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
hash: 15
|
46
|
-
segments:
|
47
|
-
- 1
|
48
|
-
- 6
|
49
|
-
- 0
|
31
|
+
- !ruby/object:Gem::Version
|
50
32
|
version: 1.6.0
|
51
33
|
type: :runtime
|
52
|
-
version_requirements: *id002
|
53
|
-
- !ruby/object:Gem::Dependency
|
54
|
-
name: multi_json
|
55
34
|
prerelease: false
|
56
|
-
|
35
|
+
version_requirements: *70250440987640
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: multi_json
|
38
|
+
requirement: &70250440987180 !ruby/object:Gem::Requirement
|
57
39
|
none: false
|
58
|
-
requirements:
|
40
|
+
requirements:
|
59
41
|
- - ~>
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
|
62
|
-
segments:
|
63
|
-
- 1
|
64
|
-
- 0
|
65
|
-
version: "1.0"
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '1.0'
|
66
44
|
type: :runtime
|
67
|
-
version_requirements: *id003
|
68
|
-
- !ruby/object:Gem::Dependency
|
69
|
-
name: activemodel
|
70
45
|
prerelease: false
|
71
|
-
|
46
|
+
version_requirements: *70250440987180
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: activemodel
|
49
|
+
requirement: &70250440986720 !ruby/object:Gem::Requirement
|
72
50
|
none: false
|
73
|
-
requirements:
|
51
|
+
requirements:
|
74
52
|
- - ~>
|
75
|
-
- !ruby/object:Gem::Version
|
76
|
-
|
77
|
-
segments:
|
78
|
-
- 3
|
79
|
-
- 0
|
80
|
-
version: "3.0"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.0'
|
81
55
|
type: :runtime
|
82
|
-
version_requirements: *id004
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: bundler
|
85
56
|
prerelease: false
|
86
|
-
|
57
|
+
version_requirements: *70250440986720
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: bundler
|
60
|
+
requirement: &70250440986260 !ruby/object:Gem::Requirement
|
87
61
|
none: false
|
88
|
-
requirements:
|
62
|
+
requirements:
|
89
63
|
- - ~>
|
90
|
-
- !ruby/object:Gem::Version
|
91
|
-
hash: 23
|
92
|
-
segments:
|
93
|
-
- 1
|
94
|
-
- 0
|
95
|
-
- 0
|
64
|
+
- !ruby/object:Gem::Version
|
96
65
|
version: 1.0.0
|
97
66
|
type: :development
|
98
|
-
version_requirements: *id005
|
99
|
-
- !ruby/object:Gem::Dependency
|
100
|
-
name: yajl-ruby
|
101
67
|
prerelease: false
|
102
|
-
|
68
|
+
version_requirements: *70250440986260
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: yajl-ruby
|
71
|
+
requirement: &70250436367320 !ruby/object:Gem::Requirement
|
103
72
|
none: false
|
104
|
-
requirements:
|
73
|
+
requirements:
|
105
74
|
- - ~>
|
106
|
-
- !ruby/object:Gem::Version
|
107
|
-
hash: 63
|
108
|
-
segments:
|
109
|
-
- 0
|
110
|
-
- 8
|
111
|
-
- 0
|
75
|
+
- !ruby/object:Gem::Version
|
112
76
|
version: 0.8.0
|
113
77
|
type: :development
|
114
|
-
version_requirements: *id006
|
115
|
-
- !ruby/object:Gem::Dependency
|
116
|
-
name: shoulda
|
117
78
|
prerelease: false
|
118
|
-
|
79
|
+
version_requirements: *70250436367320
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: shoulda
|
82
|
+
requirement: &70250436365820 !ruby/object:Gem::Requirement
|
119
83
|
none: false
|
120
|
-
requirements:
|
121
|
-
- -
|
122
|
-
- !ruby/object:Gem::Version
|
123
|
-
|
124
|
-
segments:
|
125
|
-
- 0
|
126
|
-
version: "0"
|
84
|
+
requirements:
|
85
|
+
- - ! '>='
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '0'
|
127
88
|
type: :development
|
128
|
-
version_requirements: *id007
|
129
|
-
- !ruby/object:Gem::Dependency
|
130
|
-
name: mocha
|
131
89
|
prerelease: false
|
132
|
-
|
90
|
+
version_requirements: *70250436365820
|
91
|
+
- !ruby/object:Gem::Dependency
|
92
|
+
name: mocha
|
93
|
+
requirement: &70250436364080 !ruby/object:Gem::Requirement
|
133
94
|
none: false
|
134
|
-
requirements:
|
135
|
-
- -
|
136
|
-
- !ruby/object:Gem::Version
|
137
|
-
|
138
|
-
segments:
|
139
|
-
- 0
|
140
|
-
version: "0"
|
95
|
+
requirements:
|
96
|
+
- - ! '>='
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '0'
|
141
99
|
type: :development
|
142
|
-
version_requirements: *id008
|
143
|
-
- !ruby/object:Gem::Dependency
|
144
|
-
name: activerecord
|
145
100
|
prerelease: false
|
146
|
-
|
101
|
+
version_requirements: *70250436364080
|
102
|
+
- !ruby/object:Gem::Dependency
|
103
|
+
name: activerecord
|
104
|
+
requirement: &70250436362640 !ruby/object:Gem::Requirement
|
147
105
|
none: false
|
148
|
-
requirements:
|
106
|
+
requirements:
|
149
107
|
- - ~>
|
150
|
-
- !ruby/object:Gem::Version
|
151
|
-
hash: 9
|
152
|
-
segments:
|
153
|
-
- 3
|
154
|
-
- 0
|
155
|
-
- 7
|
108
|
+
- !ruby/object:Gem::Version
|
156
109
|
version: 3.0.7
|
157
110
|
type: :development
|
158
|
-
version_requirements: *id009
|
159
|
-
- !ruby/object:Gem::Dependency
|
160
|
-
name: mongoid
|
161
111
|
prerelease: false
|
162
|
-
|
112
|
+
version_requirements: *70250436362640
|
113
|
+
- !ruby/object:Gem::Dependency
|
114
|
+
name: mongoid
|
115
|
+
requirement: &70250436361060 !ruby/object:Gem::Requirement
|
163
116
|
none: false
|
164
|
-
requirements:
|
117
|
+
requirements:
|
165
118
|
- - ~>
|
166
|
-
- !ruby/object:Gem::Version
|
167
|
-
hash: 5
|
168
|
-
segments:
|
169
|
-
- 2
|
170
|
-
- 2
|
171
|
-
- 1
|
119
|
+
- !ruby/object:Gem::Version
|
172
120
|
version: 2.2.1
|
173
121
|
type: :development
|
174
|
-
version_requirements: *id010
|
175
|
-
- !ruby/object:Gem::Dependency
|
176
|
-
name: sqlite3
|
177
122
|
prerelease: false
|
178
|
-
|
123
|
+
version_requirements: *70250436361060
|
124
|
+
- !ruby/object:Gem::Dependency
|
125
|
+
name: sqlite3
|
126
|
+
requirement: &70250441020080 !ruby/object:Gem::Requirement
|
179
127
|
none: false
|
180
|
-
requirements:
|
181
|
-
- -
|
182
|
-
- !ruby/object:Gem::Version
|
183
|
-
|
184
|
-
segments:
|
185
|
-
- 0
|
186
|
-
version: "0"
|
128
|
+
requirements:
|
129
|
+
- - ! '>='
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
187
132
|
type: :development
|
188
|
-
version_requirements: *id011
|
189
|
-
- !ruby/object:Gem::Dependency
|
190
|
-
name: supermodel
|
191
133
|
prerelease: false
|
192
|
-
|
134
|
+
version_requirements: *70250441020080
|
135
|
+
- !ruby/object:Gem::Dependency
|
136
|
+
name: supermodel
|
137
|
+
requirement: &70250441019620 !ruby/object:Gem::Requirement
|
193
138
|
none: false
|
194
|
-
requirements:
|
195
|
-
- -
|
196
|
-
- !ruby/object:Gem::Version
|
197
|
-
|
198
|
-
segments:
|
199
|
-
- 0
|
200
|
-
version: "0"
|
139
|
+
requirements:
|
140
|
+
- - ! '>='
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
version: '0'
|
201
143
|
type: :development
|
202
|
-
version_requirements: *id012
|
203
|
-
- !ruby/object:Gem::Dependency
|
204
|
-
name: rdoc
|
205
144
|
prerelease: false
|
206
|
-
|
145
|
+
version_requirements: *70250441019620
|
146
|
+
- !ruby/object:Gem::Dependency
|
147
|
+
name: rdoc
|
148
|
+
requirement: &70250441019180 !ruby/object:Gem::Requirement
|
207
149
|
none: false
|
208
|
-
requirements:
|
209
|
-
- -
|
210
|
-
- !ruby/object:Gem::Version
|
211
|
-
|
212
|
-
segments:
|
213
|
-
- 0
|
214
|
-
version: "0"
|
150
|
+
requirements:
|
151
|
+
- - ! '>='
|
152
|
+
- !ruby/object:Gem::Version
|
153
|
+
version: '0'
|
215
154
|
type: :development
|
216
|
-
version_requirements: *id013
|
217
|
-
- !ruby/object:Gem::Dependency
|
218
|
-
name: rcov
|
219
155
|
prerelease: false
|
220
|
-
|
156
|
+
version_requirements: *70250441019180
|
157
|
+
- !ruby/object:Gem::Dependency
|
158
|
+
name: rcov
|
159
|
+
requirement: &70250441018760 !ruby/object:Gem::Requirement
|
221
160
|
none: false
|
222
|
-
requirements:
|
223
|
-
- -
|
224
|
-
- !ruby/object:Gem::Version
|
225
|
-
|
226
|
-
segments:
|
227
|
-
- 0
|
228
|
-
version: "0"
|
161
|
+
requirements:
|
162
|
+
- - ! '>='
|
163
|
+
- !ruby/object:Gem::Version
|
164
|
+
version: '0'
|
229
165
|
type: :development
|
230
|
-
version_requirements: *id014
|
231
|
-
- !ruby/object:Gem::Dependency
|
232
|
-
name: turn
|
233
166
|
prerelease: false
|
234
|
-
|
167
|
+
version_requirements: *70250441018760
|
168
|
+
- !ruby/object:Gem::Dependency
|
169
|
+
name: turn
|
170
|
+
requirement: &70250441018340 !ruby/object:Gem::Requirement
|
235
171
|
none: false
|
236
|
-
requirements:
|
237
|
-
- -
|
238
|
-
- !ruby/object:Gem::Version
|
239
|
-
|
240
|
-
segments:
|
241
|
-
- 0
|
242
|
-
version: "0"
|
172
|
+
requirements:
|
173
|
+
- - ! '>='
|
174
|
+
- !ruby/object:Gem::Version
|
175
|
+
version: '0'
|
243
176
|
type: :development
|
244
|
-
|
245
|
-
|
177
|
+
prerelease: false
|
178
|
+
version_requirements: *70250441018340
|
179
|
+
description: ! " Tire is a Ruby client for the ElasticSearch search engine/database.\n\n
|
180
|
+
\ It provides Ruby-like API for fluent communication with the ElasticSearch server\n
|
181
|
+
\ and blends with ActiveModel class for convenient usage in Rails applications.\n\n
|
182
|
+
\ It allows to delete and create indices, define mapping for them, supports\n the
|
183
|
+
bulk API, and presents an easy-to-use DSL for constructing your queries.\n\n It
|
184
|
+
has full ActiveRecord/ActiveModel compatibility, allowing you to index\n your
|
185
|
+
models (incrementally upon saving, or in bulk), searching and\n paginating the
|
186
|
+
results.\n\n Please check the documentation at <http://karmi.github.com/tire/>.\n"
|
246
187
|
email: karmi@karmi.cz
|
247
188
|
executables: []
|
248
|
-
|
249
189
|
extensions: []
|
250
|
-
|
251
|
-
extra_rdoc_files:
|
190
|
+
extra_rdoc_files:
|
252
191
|
- README.markdown
|
253
192
|
- MIT-LICENSE
|
254
|
-
files:
|
193
|
+
files:
|
255
194
|
- .gitignore
|
256
195
|
- .travis.yml
|
257
196
|
- Gemfile
|
@@ -299,7 +238,9 @@ files:
|
|
299
238
|
- test/integration/active_model_searchable_test.rb
|
300
239
|
- test/integration/active_record_searchable_test.rb
|
301
240
|
- test/integration/boolean_queries_test.rb
|
241
|
+
- test/integration/custom_score_queries_test.rb
|
302
242
|
- test/integration/facets_test.rb
|
243
|
+
- test/integration/filtered_queries_test.rb
|
303
244
|
- test/integration/filters_test.rb
|
304
245
|
- test/integration/highlight_test.rb
|
305
246
|
- test/integration/index_mapping_test.rb
|
@@ -344,61 +285,36 @@ files:
|
|
344
285
|
- test/unit/search_test.rb
|
345
286
|
- test/unit/tire_test.rb
|
346
287
|
- tire.gemspec
|
347
|
-
has_rdoc: true
|
348
288
|
homepage: http://github.com/karmi/tire
|
349
289
|
licenses: []
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
--------------------------------------------------------------------------------
|
357
|
-
|
358
|
-
IMPORTANT CHANGES LATELY:
|
359
|
-
|
360
|
-
* Fixed a bug: `Results::Item` was referencing Ruby classes incorrectly within Rails
|
361
|
-
* Fixed `ZeroDivisionError` for empty result sets
|
362
|
-
* Display correct exception on request failure
|
363
|
-
* Added support for range queries
|
364
|
-
* Added support for mapping options
|
365
|
-
|
366
|
-
See the full changelog at <http://github.com/karmi/tire/commits/v0.3.8>.
|
367
|
-
|
368
|
-
--------------------------------------------------------------------------------
|
369
|
-
|
370
|
-
rdoc_options:
|
290
|
+
post_install_message: ! "================================================================================\n\n
|
291
|
+
\ Please check the documentation at <http://karmi.github.com/tire/>.\n\n--------------------------------------------------------------------------------\n\n
|
292
|
+
\ IMPORTANT CHANGES LATELY:\n\n * Added support for filtered queries [#134]\n *
|
293
|
+
Added support for \"custom_score\" queries [#133]\n\n See the full changelog at
|
294
|
+
<http://github.com/karmi/tire/commits/v0.3.9>.\n\n--------------------------------------------------------------------------------\n"
|
295
|
+
rdoc_options:
|
371
296
|
- --charset=UTF-8
|
372
|
-
require_paths:
|
297
|
+
require_paths:
|
373
298
|
- lib
|
374
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
299
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
375
300
|
none: false
|
376
|
-
requirements:
|
377
|
-
- -
|
378
|
-
- !ruby/object:Gem::Version
|
379
|
-
|
380
|
-
|
381
|
-
- 0
|
382
|
-
version: "0"
|
383
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
301
|
+
requirements:
|
302
|
+
- - ! '>='
|
303
|
+
- !ruby/object:Gem::Version
|
304
|
+
version: '0'
|
305
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
384
306
|
none: false
|
385
|
-
requirements:
|
386
|
-
- -
|
387
|
-
- !ruby/object:Gem::Version
|
388
|
-
hash: 23
|
389
|
-
segments:
|
390
|
-
- 1
|
391
|
-
- 3
|
392
|
-
- 6
|
307
|
+
requirements:
|
308
|
+
- - ! '>='
|
309
|
+
- !ruby/object:Gem::Version
|
393
310
|
version: 1.3.6
|
394
311
|
requirements: []
|
395
|
-
|
396
312
|
rubyforge_project: tire
|
397
|
-
rubygems_version: 1.
|
313
|
+
rubygems_version: 1.8.10
|
398
314
|
signing_key:
|
399
315
|
specification_version: 3
|
400
316
|
summary: Ruby client for ElasticSearch
|
401
|
-
test_files:
|
317
|
+
test_files:
|
402
318
|
- test/fixtures/articles/1.json
|
403
319
|
- test/fixtures/articles/2.json
|
404
320
|
- test/fixtures/articles/3.json
|
@@ -407,7 +323,9 @@ test_files:
|
|
407
323
|
- test/integration/active_model_searchable_test.rb
|
408
324
|
- test/integration/active_record_searchable_test.rb
|
409
325
|
- test/integration/boolean_queries_test.rb
|
326
|
+
- test/integration/custom_score_queries_test.rb
|
410
327
|
- test/integration/facets_test.rb
|
328
|
+
- test/integration/filtered_queries_test.rb
|
411
329
|
- test/integration/filters_test.rb
|
412
330
|
- test/integration/highlight_test.rb
|
413
331
|
- test/integration/index_mapping_test.rb
|