Class: Workarea::Elasticsearch::Index
- Inherits:
-
Object
- Object
- Workarea::Elasticsearch::Index
- Defined in:
- lib/workarea/elasticsearch/index.rb
Instance Attribute Summary collapse
-
#aliases ⇒ Object
readonly
Returns the value of attribute aliases.
-
#mappings ⇒ Object
readonly
Returns the value of attribute mappings.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
Instance Method Summary collapse
- #bulk(documents, options = {}) ⇒ Object
- #clear_scroll(*scroll_ids) ⇒ Object
- #count(query = nil, options = {}) ⇒ Object
- #create!(force: false) ⇒ Object
- #delete(id, options = {}) ⇒ Object
- #delete! ⇒ Object
- #exists? ⇒ Boolean
-
#initialize(name, mappings, aliases = {}) ⇒ Index
constructor
A new instance of Index.
- #save(document, options = {}) ⇒ Object
- #scroll(scroll_id, options = {}) ⇒ Object
- #search(query, options = {}) ⇒ Object
- #update(document, options = {}) ⇒ Object
- #url ⇒ Object
- #wait_for_health ⇒ Object
- #while_closed ⇒ Object
Constructor Details
#initialize(name, mappings, aliases = {}) ⇒ Index
Returns a new instance of Index.
6 7 8 9 10 |
# File 'lib/workarea/elasticsearch/index.rb', line 6 def initialize(name, mappings, aliases = {}) @name = name @mappings = mappings @aliases = aliases end |
Instance Attribute Details
#aliases ⇒ Object (readonly)
Returns the value of attribute aliases.
4 5 6 |
# File 'lib/workarea/elasticsearch/index.rb', line 4 def aliases @aliases end |
#mappings ⇒ Object (readonly)
Returns the value of attribute mappings.
4 5 6 |
# File 'lib/workarea/elasticsearch/index.rb', line 4 def mappings @mappings end |
#name ⇒ Object (readonly)
Returns the value of attribute name.
4 5 6 |
# File 'lib/workarea/elasticsearch/index.rb', line 4 def name @name end |
Instance Method Details
#bulk(documents, options = {}) ⇒ Object
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/workarea/elasticsearch/index.rb', line 76 def bulk(documents, = {}) return if documents.blank? params = { index: name, refresh: Workarea.config.auto_refresh_search, body: documents.map do |document| action = document.delete(:bulk_action).try(:to_sym) || :index if action == :delete { action => { _id: find_id_from(document) } } else { action => { _id: find_id_from(document), data: document } } end end } Workarea.elasticsearch.bulk(params.merge()) end |
#clear_scroll(*scroll_ids) ⇒ Object
131 132 133 134 |
# File 'lib/workarea/elasticsearch/index.rb', line 131 def clear_scroll(*scroll_ids) scroll_id = scroll_ids.present? ? scroll_ids.join(',') : '_all' Workarea.elasticsearch.clear_scroll(scroll_id: scroll_id) end |
#count(query = nil, options = {}) ⇒ Object
117 118 119 120 |
# File 'lib/workarea/elasticsearch/index.rb', line 117 def count(query = nil, = {}) query ||= { query: { match_all: {} } } search(query, .merge(size: 0))['hits']['total'] end |
#create!(force: false) ⇒ Object
21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/workarea/elasticsearch/index.rb', line 21 def create!(force: false) delete! if force unless exists? Workarea.elasticsearch.indices.create( index: name, body: { settings: Search::Settings.current.elasticsearch_settings, mappings: mappings, aliases: aliases } ) end end |
#delete(id, options = {}) ⇒ Object
96 97 98 99 100 101 102 103 104 105 |
# File 'lib/workarea/elasticsearch/index.rb', line 96 def delete(id, = {}) params = { index: name, id: id, refresh: Workarea.config.auto_refresh_search, ignore: [404] } Workarea.elasticsearch.delete(params.merge()) end |
#delete! ⇒ Object
36 37 38 |
# File 'lib/workarea/elasticsearch/index.rb', line 36 def delete! Workarea.elasticsearch.indices.delete(index: name, ignore: 404) end |
#exists? ⇒ Boolean
17 18 19 |
# File 'lib/workarea/elasticsearch/index.rb', line 17 def exists? Workarea.elasticsearch.indices.exists?(index: name) end |
#save(document, options = {}) ⇒ Object
54 55 56 57 58 59 60 61 62 63 |
# File 'lib/workarea/elasticsearch/index.rb', line 54 def save(document, = {}) params = { index: name, id: find_id_from(document), body: document, refresh: Workarea.config.auto_refresh_search } Workarea.elasticsearch.index(params.merge()) end |
#scroll(scroll_id, options = {}) ⇒ Object
122 123 124 125 126 127 128 129 |
# File 'lib/workarea/elasticsearch/index.rb', line 122 def scroll(scroll_id, = {}) Workarea.elasticsearch.scroll( { body: { scroll_id: scroll_id }, scroll: Workarea.config.elasticsearch_default_scroll }.merge() ) end |
#search(query, options = {}) ⇒ Object
107 108 109 110 111 112 113 114 115 |
# File 'lib/workarea/elasticsearch/index.rb', line 107 def search(query, = {}) query = if query.respond_to?(:to_h) { index: name, body: query.to_h } else { index: name, q: query.to_s } end Workarea.elasticsearch.search(query.merge()) end |
#update(document, options = {}) ⇒ Object
65 66 67 68 69 70 71 72 73 74 |
# File 'lib/workarea/elasticsearch/index.rb', line 65 def update(document, = {}) params = { index: name, id: find_id_from(document), body: { doc: document }, refresh: Workarea.config.auto_refresh_search } Workarea.elasticsearch.update(params.merge()) end |
#url ⇒ Object
12 13 14 15 |
# File 'lib/workarea/elasticsearch/index.rb', line 12 def url host = Workarea.elasticsearch.transport.hosts.first "#{Workarea.elasticsearch.transport.__full_url(host)}/#{name}" end |
#wait_for_health ⇒ Object
47 48 49 50 51 52 |
# File 'lib/workarea/elasticsearch/index.rb', line 47 def wait_for_health Workarea.elasticsearch.cluster.health( index: name, wait_for_status: 'yellow' ) end |
#while_closed ⇒ Object
40 41 42 43 44 45 |
# File 'lib/workarea/elasticsearch/index.rb', line 40 def while_closed Workarea.elasticsearch.indices.close(index: name) result = yield Workarea.elasticsearch.indices.open(index: name) result end |