stretcher 1.1.1 → 1.1.2

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/README.md CHANGED
@@ -63,7 +63,7 @@ Stretcher::Server.with_server('http://localhost:9200') {|srv|
63
63
  server.index(:foo).msearch([{query: {match_all: {}}}])
64
64
  # => Returns an array of Stretcher::SearchResults
65
65
  # Across multiple indexes
66
- server.msearch([{index: 'foo'}, {query: {match_all: {}}}])
66
+ server.msearch([{index: :foo}, {query: {match_all: {}}}])
67
67
  # => Returns an array of Stretcher::SearchResults
68
68
  ```
69
69
 
@@ -15,21 +15,21 @@ module Stretcher
15
15
  # Optionally takes a block, which will be passed a single arg with the Index obj
16
16
  # The block syntax returns the evaluated value of the block
17
17
  #
18
- # Examples:
19
- #
20
- # my_index.index(:foo) # => #<Stretcher::Index ...>
21
- #
22
- # my_index.index(:foo) {|idx| 1+1} # => 2
18
+ # my_index.index(:foo) # => #<Stretcher::Index ...>
19
+ # my_index.index(:foo) {|idx| 1+1} # => 2
23
20
  def type(name, &block)
24
21
  t = IndexType.new(self, name)
25
22
  block ? block.call(t) : t
26
23
  end
27
24
 
28
25
  # Given a hash of documents, will bulk index
26
+ #
27
+ # docs = [{"_type" => "tweet", "_id" => 91011, "text" => "Bulked"}]
28
+ # server.index(:foo).bulk_index(docs)
29
29
  def bulk_index(documents)
30
30
  @server.bulk documents.reduce("") {|post_data, d_raw|
31
31
  d = Hashie::Mash.new(d_raw)
32
- action_meta = {"index" => {"_index" => name, "_type" => d["_type"], "_id" => d["id"]}}
32
+ action_meta = {"index" => {"_index" => name, "_type" => d["_type"], "_id" => d["_id"] || d["id"]}}
33
33
  action_meta["index"]["_parent"] = d["_parent"] if d["_parent"]
34
34
  post_data << (action_meta.to_json + "\n")
35
35
  post_data << (d.to_json + "\n")
@@ -69,12 +69,13 @@ module Stretcher
69
69
  end
70
70
 
71
71
  # Issues a search with the given query opts and body, both should be hashes
72
- # Ex: res = server.index('foo').search({size: 12}, {query: {match_all: {}}})
73
- # * es.class # Stretcher::SearchResults
74
- # * res.total # => 1
75
- # * res.facets # => nil
76
- # * res.results # => [#<Hashie::Mash _id="123" text="Hello">]
77
- # * res.raw # => #<Hashie::Mash ...> Raw JSON from the search
72
+ #
73
+ # res = server.index('foo').search({size: 12}, {query: {match_all: {}}})
74
+ # es.class # Stretcher::SearchResults
75
+ # res.total # => 1
76
+ # res.facets # => nil
77
+ # res.results # => [#<Hashie::Mash _id="123" text="Hello">]
78
+ # res.raw # => #<Hashie::Mash ...> Raw JSON from the search
78
79
  def search(query_opts={}, body=nil)
79
80
  uri = path_uri('/_search?' + Util.querify(query_opts))
80
81
  logger.info { "Stretcher Search: curl -XGET #{uri} -d '#{body.to_json}'" }
@@ -88,6 +89,9 @@ module Stretcher
88
89
  # This deviates slightly from the official API in that *ONLY*
89
90
  # queries are requried, the empty {} preceding them are not
90
91
  # See: http://www.elasticsearch.org/guide/reference/api/multi-search.html
92
+ #
93
+ # server.index(:foo).msearch([{query: {match_all: {}}}])
94
+ # # => Returns an array of Stretcher::SearchResults
91
95
  def msearch(queries=[])
92
96
  raise ArgumentError, "msearch takes an array!" unless queries.is_a?(Array)
93
97
  req_body = queries.reduce([]) {|acc,q|
@@ -98,6 +102,7 @@ module Stretcher
98
102
  @server.msearch req_body
99
103
  end
100
104
 
105
+ # Full path to this index
101
106
  def path_uri(path="/")
102
107
  @server.path_uri("/#{name}") + path.to_s
103
108
  end
@@ -70,6 +70,7 @@ module Stretcher
70
70
  server.http.head(path_uri("/#{id}")).status != 404
71
71
  end
72
72
 
73
+ # Full path to this index type
73
74
  def path_uri(path="/")
74
75
  index.path_uri("/#{name}") + path.to_s
75
76
  end
@@ -11,10 +11,10 @@ module Stretcher
11
11
  end
12
12
 
13
13
  # Represents a Server context in elastic search.
14
- # Use +connect+ when you want to use the block syntax.
14
+ # Use +with_server+ when you want to use the block syntax.
15
15
  # The options hash takes an optional instance of Logger under :logger.
16
16
  #
17
- # Ex: server = Stretcher::Server.new('http://localhost:9200').
17
+ # server = Stretcher::Server.new('http://localhost:9200')
18
18
  def initialize(uri='http://localhost:9200', options={})
19
19
  @uri = uri
20
20
 
@@ -46,11 +46,8 @@ module Stretcher
46
46
  # Optionally takes a block, which will be passed a single arg with the Index obj
47
47
  # The block syntax returns the evaluated value of the block
48
48
  #
49
- # Examples:
50
- #
51
- # my_server.index(:foo) # => #<Stretcher::Index ...>
52
- #
53
- # my_server.index(:foo) {|idx| 1+1} # => 2
49
+ # my_server.index(:foo) # => #<Stretcher::Index ...>
50
+ # my_server.index(:foo) {|idx| 1+1} # => 2
54
51
  def index(name, &block)
55
52
  idx = Index.new(self, name, logger: logger)
56
53
  block ? block.call(idx) : idx
@@ -71,10 +68,13 @@ module Stretcher
71
68
  # Takes an array of msearch data as per
72
69
  # http://www.elasticsearch.org/guide/reference/api/multi-search.html
73
70
  # Should look something like:
74
- # {"index" : "test"}
75
- # {"query" : {"match_all" : {}}, "from" : 0, "size" : 10}
76
- # {"index" : "test", "search_type" : "count"}
77
- # {"query" : {"match_all" : {}}}
71
+ # data = [
72
+ # {"index" : "test"}
73
+ # {"query" : {"match_all" : {}}, "from" : 0, "size" : 10}
74
+ # {"index" : "test", "search_type" : "count"}
75
+ # {"query" : {"match_all" : {}}}
76
+ # ]
77
+ # server.msearch(data)
78
78
  def msearch(body=[])
79
79
  raise ArgumentError, "msearch takes an array!" unless body.is_a?(Array)
80
80
  fmt_body = body.map(&:to_json).join("\n") + "\n"
@@ -97,6 +97,7 @@ module Stretcher
97
97
  }
98
98
  end
99
99
 
100
+ # Full path to the server root dir
100
101
  def path_uri(path="/")
101
102
  @uri.to_s + path.to_s
102
103
  end
@@ -110,7 +111,7 @@ module Stretcher
110
111
  # Elastic search does mostly deal with JSON
111
112
  req.headers["Content-Type"] = 'application/json'
112
113
  block.call(req)
113
- end
114
+ end
114
115
  else
115
116
  http.send(method, *args)
116
117
  end
@@ -1,3 +1,3 @@
1
1
  module Stretcher
2
- VERSION = "1.1.1"
2
+ VERSION = "1.1.2"
3
3
  end
@@ -5,9 +5,9 @@ describe Stretcher::Index do
5
5
  let(:index) { server.index('foo') }
6
6
  let(:corpus) {
7
7
  [
8
- {text: "Foo", "_type" => 'tweet'},
9
- {text: "Bar", "_type" => 'tweet'},
10
- {text: "Baz", "_type" => 'tweet'}
8
+ {text: "Foo", "_type" => 'tweet', "_id" => 'fooid'},
9
+ {text: "Bar", "_type" => 'tweet', "_id" => 'barid'},
10
+ {text: "Baz", "_type" => 'tweet', "id" => 'bazid'} # Note we support both _id and id
11
11
  ]
12
12
  }
13
13
 
@@ -52,6 +52,9 @@ describe Stretcher::Index do
52
52
 
53
53
  it "should bulk index documents properly" do
54
54
  seed_corpus
55
+ corpus.each {|doc|
56
+ index.type(doc["_type"]).get(doc["_id"] || doc["id"]).text.should == doc[:text]
57
+ }
55
58
  end
56
59
 
57
60
  # TODO: Actually use two indexes
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stretcher
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.1.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-01-18 00:00:00.000000000 Z
12
+ date: 2013-01-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: faraday