FIX: Reindex post for search when post is moved to a different topic.

* This is causing certain posts to appear in searches incorrectly as `PostSearchData#raw_data` contains the outdated title, category name and tag names.
This commit is contained in:
Guo Xiang Tan 2019-03-19 17:16:57 +08:00
parent 14c1af0a9e
commit d808f36fc4
2 changed files with 29 additions and 1 deletions

View File

@ -134,7 +134,13 @@ class SearchIndexer
category_name = topic.category&.name if topic
tag_names = topic.tags.pluck(:name).join(' ') if topic
if Post === obj && (obj.saved_change_to_cooked? || force)
if Post === obj &&
(
obj.saved_change_to_cooked? ||
obj.saved_change_to_topic_id? ||
force
)
if topic
SearchIndexer.update_posts_index(obj.id, topic.title, category_name, tag_names, obj.cooked)
SearchIndexer.update_topics_index(topic.id, topic.title, obj.cooked) if obj.is_first_post?

View File

@ -81,4 +81,26 @@ describe SearchIndexer do
raw_data = PostSearchData.where(post_id: post_id).pluck(:raw_data)[0]
expect(raw_data).to eq("tester")
end
describe '.index' do
let(:post) { Fabricate(:post) }
before do
SearchIndexer.enable
end
after do
SearchIndexer.disable
end
it 'should index posts correctly' do
expect { post }.to change { PostSearchData.count }.by(1)
expect { post.update!(raw: "this is new content") }
.to change { post.reload.post_search_data.raw_data }
expect { post.update!(topic_id: Fabricate(:topic).id) }
.to change { post.reload.post_search_data.raw_data }
end
end
end