about summary refs log tree commit diff
path: root/app/chewy
diff options
context:
space:
mode:
authorEugen Rochko <eugen@zeonfederated.com>2019-08-16 13:00:30 +0200
committerGitHub <noreply@github.com>2019-08-16 13:00:30 +0200
commit70da6d663078fb7d04aed387ac085afb2e9e2cd2 (patch)
treeaca79c42569a43f9ecbf3460243dd7a03ee55f6f /app/chewy
parent6e872c6dabf12fdd2619d4042495e52edd6079bd (diff)
Fix accounts search by full/partial display name and others (#11580)
- Restrict followers counts to local users to minimize local advantage
- Fix emoji shortcodes causing error in search
- Fix search syntax parse errors not being caught
Diffstat (limited to 'app/chewy')
-rw-r--r--app/chewy/accounts_index.rb15
1 files changed, 11 insertions, 4 deletions
diff --git a/app/chewy/accounts_index.rb b/app/chewy/accounts_index.rb
index e11b80039..b814e009e 100644
--- a/app/chewy/accounts_index.rb
+++ b/app/chewy/accounts_index.rb
@@ -26,10 +26,17 @@ class AccountsIndex < Chewy::Index
   define_type ::Account.searchable.includes(:account_stat), delete_if: ->(account) { account.destroyed? || !account.searchable? } do
     root date_detection: false do
       field :id, type: 'long'
-      field :display_name, type: 'text', analyzer: 'edge_ngram', search_analyzer: 'content'
-      field :acct, type: 'text', analyzer: 'edge_ngram', search_analyzer: 'content', value: ->(account) { [account.username, account.domain].compact.join('@') }
-      field :following_count, type: 'long', value: ->(account) { account.active_relationships.count }
-      field :followers_count, type: 'long', value: ->(account) { account.passive_relationships.count }
+
+      field :display_name, type: 'text', analyzer: 'content' do
+        field :edge_ngram, type: 'text', analyzer: 'edge_ngram', search_analyzer: 'content'
+      end
+
+      field :acct, type: 'text', analyzer: 'content', value: ->(account) { [account.username, account.domain].compact.join('@') } do
+        field :edge_ngram, type: 'text', analyzer: 'edge_ngram', search_analyzer: 'content'
+      end
+
+      field :following_count, type: 'long', value: ->(account) { account.following.local.count }
+      field :followers_count, type: 'long', value: ->(account) { account.followers.local.count }
       field :last_status_at, type: 'date', value: ->(account) { account.last_status_at || account.created_at }
     end
   end