FEATURE: Include participants in PN search data (#16855)
This makes it easier to find PMs involving a particular user, for example by searching for `in:messages thisUser` (previously, that query would only return results in posts where `thisUser` was in the post body).
This commit is contained in:
parent
96d656f450
commit
71c74a262d
|
@ -115,13 +115,13 @@ class SearchIndexer
|
|||
)
|
||||
end
|
||||
|
||||
def self.update_posts_index(post_id:, topic_title:, category_name:, topic_tags:, cooked:, private_message:)
|
||||
def self.update_posts_index(post_id:, topic_title:, category_name:, topic_tags:, cooked:, private_message:, allowed_users: nil)
|
||||
update_index(
|
||||
table: 'post',
|
||||
id: post_id,
|
||||
a_weight: topic_title,
|
||||
b_weight: category_name,
|
||||
c_weight: topic_tags,
|
||||
c_weight: "#{topic_tags} #{allowed_users&.join(" ")}",
|
||||
# The tsvector resulted from parsing a string can be double the size of
|
||||
# the original string. Since there is no way to estimate the length of
|
||||
# the expected tsvector, we limit the input to ~50% of the maximum
|
||||
|
@ -231,7 +231,8 @@ class SearchIndexer
|
|||
category_name: category_name,
|
||||
topic_tags: tag_names,
|
||||
cooked: obj.cooked,
|
||||
private_message: topic.private_message?
|
||||
private_message: topic.private_message?,
|
||||
allowed_users: topic.allowed_users.pluck(:username, :name)
|
||||
)
|
||||
|
||||
SearchIndexer.update_topics_index(topic.id, topic.title, obj.cooked) if obj.is_first_post?
|
||||
|
@ -254,7 +255,8 @@ class SearchIndexer
|
|||
category_name: category_name,
|
||||
topic_tags: tag_names,
|
||||
cooked: post.cooked,
|
||||
private_message: obj.private_message?
|
||||
private_message: obj.private_message?,
|
||||
allowed_users: obj.allowed_users.pluck(:username, :name)
|
||||
)
|
||||
|
||||
SearchIndexer.update_topics_index(obj.id, obj.title, post.cooked)
|
||||
|
|
|
@ -291,6 +291,22 @@ describe SearchIndexer do
|
|||
words = post_search_data.search_data.scan(/'([^']*)'/).map { |match| match[0] }
|
||||
expect(words).to contain_exactly('best', 'beig', 'obj', 'http', 'titl', 'long', 'enou', 'unca')
|
||||
end
|
||||
|
||||
context 'private messages' do
|
||||
fab!(:user1) { Fabricate(:user, name: 'bloop', username: 'bloopdroop') }
|
||||
fab!(:user2) { Fabricate(:user, name: 'two', username: 'twotone') }
|
||||
let!(:pm_topic) { Fabricate(:private_message_topic,
|
||||
topic_allowed_users: [
|
||||
Fabricate.build(:topic_allowed_user, user: user1),
|
||||
Fabricate.build(:topic_allowed_user, user: user2)
|
||||
]) }
|
||||
let(:pm_post) { Fabricate(:post, topic: pm_topic) }
|
||||
|
||||
it 'includes participating users in a private message' do
|
||||
search_data = pm_post.post_search_data.search_data
|
||||
expect(search_data).to include("bloop", "bloopdroop", "two", "twoton")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '.queue_post_reindex' do
|
||||
|
|
Loading…
Reference in New Issue