Class: Waistband::Index

Inherits:
Object
  • Object
show all
Defined in:
lib/waistband/index.rb

Instance Method Summary collapse

Constructor Details

#initialize(index_name, options = {}) ⇒ Index

Returns a new instance of Index.



8
9
10
11
12
13
14
15
16
17
# File 'lib/waistband/index.rb', line 8

def initialize(index_name, options = {})
  options = options.stringify_keys

  @index_name = index_name
  @stringify = config['stringify']

  # alias subs
  @subs = [options['subs']] if options['subs'].present?
  @subs = @subs.flatten     if @subs.is_a?(Array)
end

Instance Method Details

#alias(alias_name) ⇒ Object



139
140
141
142
143
144
145
# File 'lib/waistband/index.rb', line 139

def alias(alias_name)
  alias_name = full_alias_name alias_name
  client.indices.put_alias(
    index: config_name,
    name: alias_name
  )
end

#alias_exists?(alias_name) ⇒ Boolean

Returns:

  • (Boolean)


147
148
149
150
151
152
153
# File 'lib/waistband/index.rb', line 147

def alias_exists?(alias_name)
  alias_name = full_alias_name alias_name
  client.indices.alias_exists?(
    index: config_name,
    name: alias_name
  )
end

#clientObject



159
160
161
# File 'lib/waistband/index.rb', line 159

def client
  @client ||= ::Waistband.config.client
end

#configObject



155
156
157
# File 'lib/waistband/index.rb', line 155

def config
  ::Waistband.config.index @index_name
end

#createObject



42
43
44
45
46
# File 'lib/waistband/index.rb', line 42

def create
  create!
rescue ::Waistband::Errors::IndexExists => ex
  true
end

#create!Object



48
49
50
51
# File 'lib/waistband/index.rb', line 48

def create!
  raise ::Waistband::Errors::IndexExists.new("Index already exists") if exists?
  client.indices.create index: config_name, body: config.except('name', 'stringify')
end

#deleteObject



53
54
55
56
57
# File 'lib/waistband/index.rb', line 53

def delete
  delete!
rescue ::Waistband::Errors::IndexNotFound => ex
  true
end

#delete!Object



59
60
61
62
# File 'lib/waistband/index.rb', line 59

def delete!
  raise ::Waistband::Errors::IndexNotFound.new("Index not found") unless exists?
  client.indices.delete index: config_name
end

#destroy(id, options = {}) ⇒ Object



110
111
112
113
114
# File 'lib/waistband/index.rb', line 110

def destroy(id, options = {})
  destroy!(id, options)
rescue Elasticsearch::Transport::Transport::Errors::NotFound
  nil
end

#destroy!(id, options = {}) ⇒ Object



116
117
118
119
120
121
122
123
124
125
# File 'lib/waistband/index.rb', line 116

def destroy!(id, options = {})
  options = options.with_indifferent_access
  type = options[:type] || default_type_name

  client.delete(
    index: config_name,
    id: id,
    type: type
  )
end

#exists?Boolean

Returns:

  • (Boolean)


19
20
21
# File 'lib/waistband/index.rb', line 19

def exists?
  client.indices.exists index: config_name
end

#find(id, options = {}) ⇒ Object



82
83
84
85
86
# File 'lib/waistband/index.rb', line 82

def find(id, options = {})
  find!(id, options)
rescue Elasticsearch::Transport::Transport::Errors::NotFound
  nil
end

#find!(id, options = {}) ⇒ Object



88
89
90
91
# File 'lib/waistband/index.rb', line 88

def find!(id, options = {})
  doc = read!(id, options)
  doc['_source']
end

#read(id, options = {}) ⇒ Object



93
94
95
96
97
# File 'lib/waistband/index.rb', line 93

def read(id, options = {})
  read!(id, options)
rescue Elasticsearch::Transport::Transport::Errors::NotFound
  nil
end

#read!(id, options = {}) ⇒ Object



99
100
101
102
103
104
105
106
107
108
# File 'lib/waistband/index.rb', line 99

def read!(id, options = {})
  options = options.with_indifferent_access
  type = options[:type] || default_type_name

  client.get(
    index: config_name,
    type: type,
    id: id
  ).with_indifferent_access
end

#refreshObject



23
24
25
# File 'lib/waistband/index.rb', line 23

def refresh
  client.indices.refresh index: config_name
end

#save(*args) ⇒ Object



64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/waistband/index.rb', line 64

def save(*args)
  body_hash = args.extract_options!
  id = args.first
  type = body_hash.delete(:type) || default_type_name

  # map everything to strings if need be
  body_hash = stringify_all(body_hash) if @stringify

  saved = client.index(
    index: config_name,
    type: type,
    id: id,
    body: body_hash
  )

  saved['_id'].present?
end

#search(body_hash) ⇒ Object



127
128
129
130
131
132
133
134
135
136
137
# File 'lib/waistband/index.rb', line 127

def search(body_hash)
  page, page_size = get_page_info body_hash
  body_hash       = parse_search_body(body_hash)

  search_hash = client.search(
    index: config_name,
    body: body_hash
  )

  ::Waistband::SearchResults.new(search_hash, page: page, page_size: page_size)
end

#update_mapping(type) ⇒ Object



27
28
29
30
31
32
33
# File 'lib/waistband/index.rb', line 27

def update_mapping(type)
  client.indices.put_mapping(
    index: config_name,
    type: type,
    body: config['mappings'][type]
  )
end

#update_settingsObject



35
36
37
38
39
40
# File 'lib/waistband/index.rb', line 35

def update_settings
  client.indices.put_settings(
    index: config_name,
    body: settings
  )
end