0
0
Fork 0

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
This commit is contained in:
Eugen Rochko 2018-02-09 23:04:47 +01:00 committed by GitHub
parent 235c14c79d
commit 3ebc0ad4d3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
13 changed files with 230 additions and 5 deletions

View file

@ -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