mirror of
https://github.com/discourse/discourse.git
synced 2024-11-26 13:03:39 +08:00
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:
parent
14c1af0a9e
commit
d808f36fc4
|
@ -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?
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue
Block a user