From d20a50aa2b77f36c27b6f7db4c6ce96fb76158f8 Mon Sep 17 00:00:00 2001 From: Molly Struve Date: Thu, 26 Mar 2020 13:11:09 -0500 Subject: [PATCH] sync feed content documents in Elasticsearch (#6888) [deploy] --- ..._re_index_feed_content_to_elasticsearch.rb | 28 +++++++++++++++++++ ...ndex_feed_content_to_elasticsearch_spec.rb | 18 ++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 lib/data_update_scripts/20200326145114_re_index_feed_content_to_elasticsearch.rb create mode 100644 spec/lib/data_update_scripts/re_index_feed_content_to_elasticsearch_spec.rb diff --git a/lib/data_update_scripts/20200326145114_re_index_feed_content_to_elasticsearch.rb b/lib/data_update_scripts/20200326145114_re_index_feed_content_to_elasticsearch.rb new file mode 100644 index 000000000..8ec3005f3 --- /dev/null +++ b/lib/data_update_scripts/20200326145114_re_index_feed_content_to_elasticsearch.rb @@ -0,0 +1,28 @@ +module DataUpdateScripts + class ReIndexFeedContentToElasticsearch + def run + clear_existing_feed_documents + + index_docs(Article.pluck(:id), "Article") + index_docs(PodcastEpisode.pluck(:id), "PodcastEpisode") + index_docs(Comment.pluck(:id), "Comment") + end + + private + + def clear_existing_feed_documents + # Clear out documents with incorrect IDs before reindex + Search::Client.delete_by_query( + index: Search::FeedContent::INDEX_ALIAS, body: { query: { match_all: {} } }, + ) + end + + def index_docs(ids, doc_type) + ids.each do |id| + Search::IndexToElasticsearchWorker.set(queue: :low_priority).perform_async( + doc_type, id + ) + end + end + end +end diff --git a/spec/lib/data_update_scripts/re_index_feed_content_to_elasticsearch_spec.rb b/spec/lib/data_update_scripts/re_index_feed_content_to_elasticsearch_spec.rb new file mode 100644 index 000000000..777f5c88a --- /dev/null +++ b/spec/lib/data_update_scripts/re_index_feed_content_to_elasticsearch_spec.rb @@ -0,0 +1,18 @@ +require "rails_helper" +require Rails.root.join("lib/data_update_scripts/20200326145114_re_index_feed_content_to_elasticsearch.rb") + +describe DataUpdateScripts::ReIndexFeedContentToElasticsearch, elasticsearch: true do + it "indexes feed content(articles, comments, podcast episodes) to Elasticsearch" do + article = create(:article) + podcast_episode = create(:podcast_episode) + comment = create(:comment) + expect { article.elasticsearch_doc }.to raise_error(Search::Errors::Transport::NotFound) + expect { podcast_episode.elasticsearch_doc }.to raise_error(Search::Errors::Transport::NotFound) + expect { comment.elasticsearch_doc }.to raise_error(Search::Errors::Transport::NotFound) + + sidekiq_perform_enqueued_jobs { described_class.new.run } + expect(article.elasticsearch_doc).not_to be_nil + expect(podcast_episode.elasticsearch_doc).not_to be_nil + expect(comment.elasticsearch_doc).not_to be_nil + end +end