Commit 32950484d4dd549fd32d16667098517bb086d743
1 parent
52d63897
Exists in
elasticsearch_api
Index models for elasticsearch
Signed-off-by: Luciano Prestes Cavalcanti <lucianopcbr@gmail.com> Signed-off-by: Lucas Moura <lucas.moura128@gmail.com>
Showing
3 changed files
with
53 additions
and
46 deletions
Show diff stats
plugins/elasticsearch/lib/elasticsearch_plugin.rb
| @@ -10,4 +10,36 @@ class ElasticsearchPlugin < Noosfero::Plugin | @@ -10,4 +10,36 @@ class ElasticsearchPlugin < Noosfero::Plugin | ||
| 10 | _("A plugin that does this and that.") | 10 | _("A plugin that does this and that.") |
| 11 | end | 11 | end |
| 12 | 12 | ||
| 13 | + Noosfero::Application.class_eval do | ||
| 14 | + config.after_initialize do | ||
| 15 | + models = ActiveRecord::Base.descendants.select do |model| | ||
| 16 | + model.const_defined?("SEARCHABLE_FIELDS") | ||
| 17 | + end | ||
| 18 | + | ||
| 19 | + models.each do |model| | ||
| 20 | + model.class_eval do | ||
| 21 | + include Elasticsearch::Model | ||
| 22 | + include Elasticsearch::Model::Callbacks | ||
| 23 | + | ||
| 24 | + settings index: { number_of_shards: 1 } do | ||
| 25 | + mappings dynamic: 'false' do | ||
| 26 | + model::SEARCHABLE_FIELDS.each do |field, value| | ||
| 27 | + indexes field | ||
| 28 | + end | ||
| 29 | + end | ||
| 30 | + model.__elasticsearch__.client.indices.delete \ | ||
| 31 | + index: model.index_name rescue nil | ||
| 32 | + model.__elasticsearch__.client.indices.create \ | ||
| 33 | + index: model.index_name, | ||
| 34 | + body: { | ||
| 35 | + settings: model.settings.to_hash, | ||
| 36 | + mappings: model.mappings.to_hash | ||
| 37 | + } | ||
| 38 | + | ||
| 39 | + model.import | ||
| 40 | + end | ||
| 41 | + end | ||
| 42 | + end | ||
| 43 | + end | ||
| 44 | + end | ||
| 13 | end | 45 | end |
plugins/elasticsearch/lib/ext/community.rb
| @@ -1,46 +0,0 @@ | @@ -1,46 +0,0 @@ | ||
| 1 | -require_dependency 'community' | ||
| 2 | - | ||
| 3 | -require 'elasticsearch/model' | ||
| 4 | - | ||
| 5 | -Community.class_eval do | ||
| 6 | - include Elasticsearch::Model | ||
| 7 | - include Elasticsearch::Model::Callbacks | ||
| 8 | - | ||
| 9 | - def self.search(query) | ||
| 10 | - __elasticsearch__.search( | ||
| 11 | - { | ||
| 12 | - query: { | ||
| 13 | - multi_match: { | ||
| 14 | - query: query, | ||
| 15 | - fields: ['name', 'identifier'] | ||
| 16 | - } | ||
| 17 | - }, | ||
| 18 | - highlight: { | ||
| 19 | - pre_tags: ['<em>'], | ||
| 20 | - post_tags: ['</em>'], | ||
| 21 | - fields: { | ||
| 22 | - name: {}, | ||
| 23 | - identifier: {} | ||
| 24 | - } | ||
| 25 | - } | ||
| 26 | - } | ||
| 27 | - ) | ||
| 28 | - end | ||
| 29 | - | ||
| 30 | - settings index: { number_of_shards: 1 } do | ||
| 31 | - mappings dynamic: 'false' do | ||
| 32 | - indexes :name, analyzer: 'english', index_options: 'offsets' | ||
| 33 | - indexes :identifier, analyzer: 'english' | ||
| 34 | - end | ||
| 35 | - end | ||
| 36 | -end | ||
| 37 | - | ||
| 38 | -Community.__elasticsearch__.client.indices.delete index: Community.index_name rescue nil | ||
| 39 | - | ||
| 40 | -# Create the new index with the new mapping | ||
| 41 | -Community.__elasticsearch__.client.indices.create \ | ||
| 42 | - index: Community.index_name, | ||
| 43 | - body: { settings: Community.settings.to_hash, mappings: Community.mappings.to_hash } | ||
| 44 | - | ||
| 45 | -# Index all Community records from the DB to Elasticsearch | ||
| 46 | -Community.import |
| @@ -0,0 +1,21 @@ | @@ -0,0 +1,21 @@ | ||
| 1 | +require 'test_helper' | ||
| 2 | + | ||
| 3 | +class IndexModelsTest < ActiveSupport::TestCase | ||
| 4 | + | ||
| 5 | + should "check index models on elasticsearch" do | ||
| 6 | + fields = [] | ||
| 7 | + mappings = [] | ||
| 8 | + | ||
| 9 | + ActiveRecord::Base.descendants.each do |model| | ||
| 10 | + if model.const_defined?("SEARCHABLE_FIELDS") | ||
| 11 | + mappings << model.mappings.instance_values['mapping'].keys.sort | ||
| 12 | + fields << model::SEARCHABLE_FIELDS.keys.sort | ||
| 13 | + end | ||
| 14 | + end | ||
| 15 | + | ||
| 16 | + mappings.count.times do |i| | ||
| 17 | + assert_equal mappings[i], fields[i] | ||
| 18 | + end | ||
| 19 | + end | ||
| 20 | + | ||
| 21 | +end |