67 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			67 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
 |