PERF: reindex search data without loading large post counts
This commit is contained in:
parent
d27e81a296
commit
56f7b4e01e
|
@ -10,41 +10,46 @@ module Jobs
|
|||
rebuild_problem_users
|
||||
end
|
||||
|
||||
def rebuild_problem_categories(limit = 10000)
|
||||
categories = load_problem_categories(limit)
|
||||
def rebuild_problem_categories(limit = 500)
|
||||
category_ids = load_problem_category_ids(limit)
|
||||
|
||||
categories.each do |category|
|
||||
SearchIndexer.index(category, force: true)
|
||||
category_ids.each do |id|
|
||||
category = Category.find_by(id: id)
|
||||
SearchIndexer.index(category, force: true) if category
|
||||
end
|
||||
end
|
||||
|
||||
def rebuild_problem_users(limit = 10000)
|
||||
users = load_problem_users(limit)
|
||||
user_ids = load_problem_user_ids(limit)
|
||||
|
||||
users.each do |user|
|
||||
SearchIndexer.index(user, force: true)
|
||||
user_ids.each do |id|
|
||||
user = User.find_by(id: id)
|
||||
SearchIndexer.index(user, force: true) if user
|
||||
end
|
||||
end
|
||||
|
||||
def rebuild_problem_topics(limit = 10000)
|
||||
topics = load_problem_topics(limit)
|
||||
topic_ids = load_problem_topic_ids(limit)
|
||||
|
||||
topics.each do |topic|
|
||||
SearchIndexer.index(topic, force: true)
|
||||
topic_ids.each do |id|
|
||||
topic = Topic.find_by(id: id)
|
||||
SearchIndexer.index(topic, force: true) if topic
|
||||
end
|
||||
end
|
||||
|
||||
def rebuild_problem_posts(limit = 10000)
|
||||
posts = load_problem_posts(limit)
|
||||
post_ids = load_problem_post_ids(limit)
|
||||
|
||||
posts.each do |post|
|
||||
SearchIndexer.index(post, force: true)
|
||||
post_ids.each do |id|
|
||||
post = Post.find_by(id: id)
|
||||
# could be deleted while iterating through batch
|
||||
SearchIndexer.index(post, force: true) if post
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def load_problem_posts(limit)
|
||||
def load_problem_post_ids(limit)
|
||||
Post.joins(:topic)
|
||||
.where('posts.id IN (
|
||||
SELECT p2.id FROM posts p2
|
||||
|
@ -52,27 +57,31 @@ module Jobs
|
|||
WHERE pd.post_id IS NULL
|
||||
)', SiteSetting.default_locale, Search::INDEX_VERSION)
|
||||
.limit(limit)
|
||||
.pluck(:id)
|
||||
end
|
||||
|
||||
def load_problem_categories(limit)
|
||||
def load_problem_category_ids(limit)
|
||||
Category.joins(:category_search_data)
|
||||
.where('category_search_data.locale != ?
|
||||
OR category_search_data.version != ?', SiteSetting.default_locale, Search::INDEX_VERSION)
|
||||
.limit(limit)
|
||||
.pluck(:id)
|
||||
end
|
||||
|
||||
def load_problem_topics(limit)
|
||||
def load_problem_topic_ids(limit)
|
||||
Topic.joins(:topic_search_data)
|
||||
.where('topic_search_data.locale != ?
|
||||
OR topic_search_data.version != ?', SiteSetting.default_locale, Search::INDEX_VERSION)
|
||||
.limit(limit)
|
||||
.pluck(:id)
|
||||
end
|
||||
|
||||
def load_problem_users(limit)
|
||||
def load_problem_user_ids(limit)
|
||||
User.joins(:user_search_data)
|
||||
.where('user_search_data.locale != ?
|
||||
OR user_search_data.version != ?', SiteSetting.default_locale, Search::INDEX_VERSION)
|
||||
.limit(limit)
|
||||
.pluck(:id)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue