Class: Rails::Contact::Search::Backends::Elasticsearch
- Inherits:
-
Object
- Object
- Rails::Contact::Search::Backends::Elasticsearch
- Defined in:
- lib/rails/contact/search/backends/elasticsearch.rb
Constant Summary collapse
- INDEX =
"rails_contact_contacts".freeze
Instance Method Summary collapse
- #create_index! ⇒ Object
-
#initialize(client: nil) ⇒ Elasticsearch
constructor
A new instance of Elasticsearch.
- #remove(contact_id) ⇒ Object
- #search(query, filters) ⇒ Object
- #upsert(contact) ⇒ Object
Constructor Details
#initialize(client: nil) ⇒ Elasticsearch
Returns a new instance of Elasticsearch.
8 9 10 |
# File 'lib/rails/contact/search/backends/elasticsearch.rb', line 8 def initialize(client: nil) @client = client || ::Elasticsearch::Client.new(url: Rails::Contact.configuration.elasticsearch_url) end |
Instance Method Details
#create_index! ⇒ Object
31 32 33 34 35 |
# File 'lib/rails/contact/search/backends/elasticsearch.rb', line 31 def create_index! return if @client.indices.exists?(index: INDEX) @client.indices.create(index: INDEX, body: index_mapping) end |
#remove(contact_id) ⇒ Object
25 26 27 28 29 |
# File 'lib/rails/contact/search/backends/elasticsearch.rb', line 25 def remove(contact_id) @client.delete(index: INDEX, id: contact_id) rescue StandardError nil end |
#search(query, filters) ⇒ Object
12 13 14 15 16 17 18 19 |
# File 'lib/rails/contact/search/backends/elasticsearch.rb', line 12 def search(query, filters) response = @client.search(index: INDEX, body: search_body(query, filters)) ids = response.fetch("hits", {}).fetch("hits", []).map { |doc| doc["_id"] } records_by_id = Contact.where(id: ids).index_by { |record| record.id.to_s } ids.filter_map { |id| records_by_id[id.to_s] } rescue StandardError Search::Backends::Database.new.search(query, filters) end |
#upsert(contact) ⇒ Object
21 22 23 |
# File 'lib/rails/contact/search/backends/elasticsearch.rb', line 21 def upsert(contact) @client.index(index: INDEX, id: contact.id, body: document_for(contact)) end |