mirror of
https://github.com/mastodon/mastodon.git
synced 2024-12-30 04:14:36 +00:00
68 lines
1.3 KiB
Ruby
68 lines
1.3 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
class AccountSuggestions::SimilarProfilesSource < AccountSuggestions::Source
|
||
|
class QueryBuilder < AccountSearchService::QueryBuilder
|
||
|
def must_clauses
|
||
|
[
|
||
|
{
|
||
|
more_like_this: {
|
||
|
fields: %w(text text.stemmed),
|
||
|
like: @query.map { |id| { _index: 'accounts', _id: id } },
|
||
|
},
|
||
|
},
|
||
|
|
||
|
{
|
||
|
term: {
|
||
|
properties: 'discoverable',
|
||
|
},
|
||
|
},
|
||
|
]
|
||
|
end
|
||
|
|
||
|
def must_not_clauses
|
||
|
[
|
||
|
{
|
||
|
terms: {
|
||
|
id: following_ids,
|
||
|
},
|
||
|
},
|
||
|
|
||
|
{
|
||
|
term: {
|
||
|
properties: 'bot',
|
||
|
},
|
||
|
},
|
||
|
]
|
||
|
end
|
||
|
|
||
|
def should_clauses
|
||
|
{
|
||
|
term: {
|
||
|
properties: {
|
||
|
value: 'verified',
|
||
|
boost: 2,
|
||
|
},
|
||
|
},
|
||
|
}
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def get(account, limit: 10)
|
||
|
recently_followed_account_ids = account.active_relationships.recent.limit(5).pluck(:target_account_id)
|
||
|
|
||
|
if Chewy.enabled? && !recently_followed_account_ids.empty?
|
||
|
QueryBuilder.new(recently_followed_account_ids, account).build.limit(limit).hits.pluck('_id').map(&:to_i).zip([key].cycle)
|
||
|
else
|
||
|
[]
|
||
|
end
|
||
|
rescue Faraday::ConnectionFailed
|
||
|
[]
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
def key
|
||
|
:similar_to_recently_followed
|
||
|
end
|
||
|
end
|