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
|
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(
|
update_index(
|
||||||
table: 'post',
|
table: 'post',
|
||||||
id: post_id,
|
id: post_id,
|
||||||
a_weight: topic_title,
|
a_weight: topic_title,
|
||||||
b_weight: category_name,
|
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 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 original string. Since there is no way to estimate the length of
|
||||||
# the expected tsvector, we limit the input to ~50% of the maximum
|
# the expected tsvector, we limit the input to ~50% of the maximum
|
||||||
|
@ -231,7 +231,8 @@ class SearchIndexer
|
||||||
category_name: category_name,
|
category_name: category_name,
|
||||||
topic_tags: tag_names,
|
topic_tags: tag_names,
|
||||||
cooked: obj.cooked,
|
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?
|
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,
|
category_name: category_name,
|
||||||
topic_tags: tag_names,
|
topic_tags: tag_names,
|
||||||
cooked: post.cooked,
|
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)
|
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] }
|
words = post_search_data.search_data.scan(/'([^']*)'/).map { |match| match[0] }
|
||||||
expect(words).to contain_exactly('best', 'beig', 'obj', 'http', 'titl', 'long', 'enou', 'unca')
|
expect(words).to contain_exactly('best', 'beig', 'obj', 'http', 'titl', 'long', 'enou', 'unca')
|
||||||
end
|
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
|
end
|
||||||
|
|
||||||
describe '.queue_post_reindex' do
|
describe '.queue_post_reindex' do
|
||||||
|
|
Loading…
Reference in New Issue