diff options
author | Eugen Rochko <eugen@zeonfederated.com> | 2018-02-09 23:04:47 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-02-09 23:04:47 +0100 |
commit | 3ebc0ad4d3c2fe0b0951a334642b769bd521a799 (patch) | |
tree | 9b88b2da41dbbc24cb922660937b5ee65366c38d /app/models | |
parent | 235c14c79d620d47012a08425324df222a136457 (diff) |
Full-text search for authorized statuses (#6423)
* Add full-text search for authorized statuses - Search API will return statuses that match the query - Only for logged in users - Only if you are author of the status, - Or you were mentioned in it - Or you favourited or reblogged it - Configuration over `ES_ENABLED`, `ES_HOST`, `ES_PORT`, `ES_PREFIX` - Run `rails chewy:deploy` to create & populate index Fix #5880 Fix #4293 Fix #1152 * Add commented out docker-compose configuration for ES container * Optimize index import, filter search results * Add basic normalization to the index * Add better stemming and normalization to the index * Skip webfinger request if search query includes both @ and a space * Fix code style * Visually separate search result sections * Fix code style issues
Diffstat (limited to 'app/models')
-rw-r--r-- | app/models/favourite.rb | 2 | ||||
-rw-r--r-- | app/models/status.rb | 18 |
2 files changed, 20 insertions, 0 deletions
diff --git a/app/models/favourite.rb b/app/models/favourite.rb index 2b1271f31..fa1884b86 100644 --- a/app/models/favourite.rb +++ b/app/models/favourite.rb @@ -13,6 +13,8 @@ class Favourite < ApplicationRecord include Paginable + update_index('statuses#status', :status) if Chewy.enabled? + belongs_to :account, inverse_of: :favourites belongs_to :status, inverse_of: :favourites, counter_cache: true diff --git a/app/models/status.rb b/app/models/status.rb index 26ff40bf7..0de89ad4e 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -31,6 +31,8 @@ class Status < ApplicationRecord include Cacheable include StatusThreadingConcern + update_index('statuses#status', :proper) if Chewy.enabled? + enum visibility: [:public, :unlisted, :private, :direct], _suffix: :visibility belongs_to :application, class_name: 'Doorkeeper::Application', optional: true @@ -78,6 +80,22 @@ class Status < ApplicationRecord delegate :domain, to: :account, prefix: true + def searchable_by(preloaded = nil) + ids = [account_id] + + if preloaded.nil? + ids += mentions.pluck(:account_id) + ids += favourites.pluck(:account_id) + ids += reblogs.pluck(:account_id) + else + ids += preloaded.mentions[id] || [] + ids += preloaded.favourites[id] || [] + ids += preloaded.reblogs[id] || [] + end + + ids.uniq + end + def reply? !in_reply_to_id.nil? || attributes['reply'] end |