elasticsearch-ruby 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,49 @@
1
+ # elasticsearch-client
2
+
3
+ An elastic search ruby library with multiple transport support originall built
4
+ for use with [SoundTracking](http://www.soundtracking.com/).
5
+
6
+ > DISCLAIMER: Quite a bit more work to be done till production ready, use at your own
7
+ > risk! :)
8
+
9
+ Installation
10
+ ------------
11
+
12
+ $ gem install elasticsearch-ruby
13
+
14
+ Usage
15
+ -----
16
+
17
+ ```ruby
18
+
19
+ transport = ElasticSearch::HTTPTransport.new(['http://localhost:9200'])
20
+ client = ElasticSearch::Client.new(transport)
21
+
22
+ index = client.create_index('twitter')
23
+ index['tweet'].put(1, { foo: 'bar' })
24
+
25
+ query = { query: { query_string: { query: 'bar' } } }
26
+ results = index['tweet'].search
27
+
28
+ results.total # 1
29
+
30
+ results.each do |result|
31
+ result.score # 1.0
32
+ result['foo'] # bar
33
+ end
34
+
35
+ client['twitter'].search(query).type # 'tweet'
36
+
37
+ ```
38
+
39
+ TODO:
40
+ -----
41
+
42
+ * Better configuration support
43
+ * Failover and retry code
44
+ * Better unicode suppoort with Thrift
45
+ * Support for Memcache Transport
46
+ * Query Builder and block support
47
+ * Stats, Health lookup methods
48
+ * Better error handling
49
+ * Documentation
@@ -26,7 +26,7 @@ module ElasticSearch
26
26
  request = Request.new({ method: :head, index: index_name })
27
27
  begin
28
28
  execute(request).status.between?(200, 206)
29
- rescue ElasticSearch::ResponseError
29
+ rescue ElasticSearch::NotFoundError
30
30
  return false
31
31
  end
32
32
  end
@@ -14,7 +14,7 @@ module ElasticSearch
14
14
 
15
15
  def parameters
16
16
  @stringified_parameters ||= @parameters.inject({}) do |options, (key, value)|
17
- options[key.to_s] = value
17
+ options[key.to_s] = value.to_s
18
18
  options
19
19
  end if @parameters
20
20
  end
@@ -24,10 +24,9 @@ module ElasticSearch
24
24
  end
25
25
 
26
26
  def path
27
- components = [@index, @type]
28
- components << @id if @id
27
+ components = [@index, @type, @id]
29
28
  components << "_#{@action.to_s}" if @action
30
- components.compact.join("/")
29
+ "/#{components.compact.join("/")}"
31
30
  end
32
31
  end
33
32
  end
@@ -14,7 +14,7 @@ module ElasticSearch
14
14
  elsif self.body['exists'].eql?(false)
15
15
  raise ElasticSearch::ItemMissingException, "_id: #{self.body['id']} NOT FOUND"
16
16
  else
17
- raise ElasticSearch::ResponseError
17
+ raise ElasticSearch::NotFoundError
18
18
  end
19
19
  else
20
20
  raise ElasticSearch::ResponseError, "#{self.body['status']}: #{self.body['error']}"
@@ -33,6 +33,7 @@ module ElasticSearch
33
33
  end
34
34
 
35
35
  class ResponseError < StandardError; end
36
- class IndexMissingException < StandardError; end
37
- class ItemMissingException < StandardError; end
36
+ class NotFoundError < StandardError; end
37
+ class IndexMissingException < NotFoundError; end
38
+ class ItemMissingException < NotFoundError; end
38
39
  end
@@ -14,13 +14,14 @@ module ElasticSearch
14
14
  end
15
15
 
16
16
  class ResultItem < HashWithIndifferentAccess
17
- attr_reader :index, :type, :id, :score
17
+ attr_reader :index, :type, :id, :score, :explanation
18
18
 
19
19
  def initialize(hit)
20
20
  @index = hit['_index']
21
21
  @type = hit['_type']
22
22
  @id = hit['_id']
23
23
  @score = hit['_score']
24
+ @explanation = hit ['_explanation']
24
25
  self.replace(hit['_source'])
25
26
  end
26
27
  end
@@ -47,6 +47,16 @@ module ElasticSearch
47
47
  request = build_request({ method: :get, id: id.to_s, action: :mlt, parameters: parameters, body: doc })
48
48
  end
49
49
 
50
+ def mapping
51
+ request = build_request(method: :get, action: :mapping)
52
+ execute(request).body
53
+ end
54
+
55
+ def mapping=(mapping)
56
+ request = build_request(method: :put, action: :mapping, body: mapping)
57
+ execute(request).status.eql?(200)
58
+ end
59
+
50
60
  def delete_mapping
51
61
  request = build_request({ method: :delete })
52
62
  execute(request).status.eql?(200)
@@ -1,3 +1,3 @@
1
1
  module ElasticSearch
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -43,10 +43,14 @@ describe ElasticSearch::Client do
43
43
  end
44
44
 
45
45
  describe :has_index? do
46
- it "should know if an index exists" do
46
+ it "should return true if an index exists" do
47
47
  client.create_index(TEST_INDEX).refresh
48
48
  client.has_index?(TEST_INDEX).must_equal true
49
49
  end
50
+
51
+ it "should return false if an index does not exist" do
52
+ client.has_index?(TEST_INDEX).must_equal false
53
+ end
50
54
  end
51
55
 
52
56
  describe :bulk do
@@ -85,7 +85,8 @@ describe ElasticSearch::Index do
85
85
 
86
86
  describe :mapping do
87
87
  it "should return the mapping" do
88
- index.mapping
88
+ index[:tweet].mapping = { tweet: { properties: { message: { type: 'string' } } } }
89
+ index.mapping[TEST_INDEX]['tweet']['properties']['message']['type'].must_equal 'string'
89
90
  end
90
91
  end
91
92
 
@@ -51,6 +51,13 @@ describe ElasticSearch::Type do
51
51
  results.total.must_equal 20
52
52
  results.count.must_equal 10
53
53
  end
54
+
55
+ it "should return an explanation if explain is passed as a parameter" do
56
+ type.put(1, { foo: 'bar' })
57
+ index.refresh
58
+ results = type.search(nil, q: 'bar', explain: true)
59
+ results.first.explanation.must_be_kind_of Hash
60
+ end
54
61
  end
55
62
  end
56
63
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: elasticsearch-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-18 00:00:00.000000000 Z
12
+ date: 2012-06-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: thrift
16
- requirement: &70153279330420 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,15 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70153279330420
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: activesupport
27
- requirement: &70153279329780 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
35
  - - ! '>='
@@ -32,10 +37,15 @@ dependencies:
32
37
  version: 3.0.0
33
38
  type: :runtime
34
39
  prerelease: false
35
- version_requirements: *70153279329780
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: 3.0.0
36
46
  - !ruby/object:Gem::Dependency
37
47
  name: rake
38
- requirement: &70153279329160 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
39
49
  none: false
40
50
  requirements:
41
51
  - - ! '>='
@@ -43,10 +53,15 @@ dependencies:
43
53
  version: '0'
44
54
  type: :development
45
55
  prerelease: false
46
- version_requirements: *70153279329160
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
47
62
  - !ruby/object:Gem::Dependency
48
63
  name: minitest
49
- requirement: &70153279328580 !ruby/object:Gem::Requirement
64
+ requirement: !ruby/object:Gem::Requirement
50
65
  none: false
51
66
  requirements:
52
67
  - - ! '>='
@@ -54,10 +69,15 @@ dependencies:
54
69
  version: '0'
55
70
  type: :development
56
71
  prerelease: false
57
- version_requirements: *70153279328580
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
58
78
  - !ruby/object:Gem::Dependency
59
79
  name: turn
60
- requirement: &70153279328040 !ruby/object:Gem::Requirement
80
+ requirement: !ruby/object:Gem::Requirement
61
81
  none: false
62
82
  requirements:
63
83
  - - ! '>='
@@ -65,7 +85,12 @@ dependencies:
65
85
  version: '0'
66
86
  type: :development
67
87
  prerelease: false
68
- version_requirements: *70153279328040
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
69
94
  description: Ruby Driver for Elastic Search
70
95
  email:
71
96
  - edmund@edmundatwork.com
@@ -76,6 +101,7 @@ files:
76
101
  - .gitignore
77
102
  - .rvmrc
78
103
  - Gemfile
104
+ - README.markdown
79
105
  - Rakefile
80
106
  - elastic_search.gemspec
81
107
  - lib/elastic_search.rb
@@ -110,15 +136,21 @@ required_ruby_version: !ruby/object:Gem::Requirement
110
136
  - - ! '>='
111
137
  - !ruby/object:Gem::Version
112
138
  version: '0'
139
+ segments:
140
+ - 0
141
+ hash: -1939019870286825745
113
142
  required_rubygems_version: !ruby/object:Gem::Requirement
114
143
  none: false
115
144
  requirements:
116
145
  - - ! '>='
117
146
  - !ruby/object:Gem::Version
118
147
  version: '0'
148
+ segments:
149
+ - 0
150
+ hash: -1939019870286825745
119
151
  requirements: []
120
152
  rubyforge_project: elasticsearch
121
- rubygems_version: 1.8.17
153
+ rubygems_version: 1.8.24
122
154
  signing_key:
123
155
  specification_version: 3
124
156
  summary: Ruby Driver for Elastic Search