about summary refs log tree commit diff
path: root/app/chewy/accounts_index.rb
diff options
context:
space:
mode:
authorReverite <github@reverite.sh>2019-08-20 10:46:41 -0600
committerReverite <github@reverite.sh>2019-08-20 10:46:41 -0600
commitd2c357ba86b1a9d1b7b4c291e1c55811997027ed (patch)
tree229bd4223833900f11701fb232f6ea7b2e4160f1 /app/chewy/accounts_index.rb
parent2e221bd5b6472d1eecb654b3518af7886d3dadaf (diff)
parentbce46f2057b06e78958a42821f3ce18c945de88d (diff)
Merge branch 'glitch' into production
Diffstat (limited to 'app/chewy/accounts_index.rb')
-rw-r--r--app/chewy/accounts_index.rb43
1 files changed, 43 insertions, 0 deletions
diff --git a/app/chewy/accounts_index.rb b/app/chewy/accounts_index.rb
new file mode 100644
index 000000000..b814e009e
--- /dev/null
+++ b/app/chewy/accounts_index.rb
@@ -0,0 +1,43 @@
+# frozen_string_literal: true
+
+class AccountsIndex < Chewy::Index
+  settings index: { refresh_interval: '5m' }, analysis: {
+    analyzer: {
+      content: {
+        tokenizer: 'whitespace',
+        filter: %w(lowercase asciifolding cjk_width),
+      },
+
+      edge_ngram: {
+        tokenizer: 'edge_ngram',
+        filter: %w(lowercase asciifolding cjk_width),
+      },
+    },
+
+    tokenizer: {
+      edge_ngram: {
+        type: 'edge_ngram',
+        min_gram: 1,
+        max_gram: 15,
+      },
+    },
+  }
+
+  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: '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
+end