Add new public status index (#26344)
Co-authored-by: Eugen Rochko <eugen@zeonfederated.com> Co-authored-by: Claire <claire.github-309c@sitedethib.com>
This commit is contained in:
		@@ -62,6 +62,6 @@ class AccountsIndex < Chewy::Index
 | 
			
		||||
    field(:last_status_at, type: 'date', value: ->(account) { account.last_status_at || account.created_at })
 | 
			
		||||
    field(:display_name, type: 'text', analyzer: 'verbatim') { field :edge_ngram, type: 'text', analyzer: 'edge_ngram', search_analyzer: 'verbatim' }
 | 
			
		||||
    field(:username, type: 'text', analyzer: 'verbatim', value: ->(account) { [account.username, account.domain].compact.join('@') }) { field :edge_ngram, type: 'text', analyzer: 'edge_ngram', search_analyzer: 'verbatim' }
 | 
			
		||||
    field(:text, type: 'text', value: ->(account) { account.searchable_text }) { field :stemmed, type: 'text', analyzer: 'natural' }
 | 
			
		||||
    field(:text, type: 'text', analyzer: 'whitespace', value: ->(account) { account.searchable_text }) { field :stemmed, type: 'text', analyzer: 'natural' }
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										50
									
								
								app/chewy/public_statuses_index.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								app/chewy/public_statuses_index.rb
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,50 @@
 | 
			
		||||
# frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
class PublicStatusesIndex < Chewy::Index
 | 
			
		||||
  settings index: index_preset(refresh_interval: '30s', number_of_shards: 5), analysis: {
 | 
			
		||||
    filter: {
 | 
			
		||||
      english_stop: {
 | 
			
		||||
        type: 'stop',
 | 
			
		||||
        stopwords: '_english_',
 | 
			
		||||
      },
 | 
			
		||||
 | 
			
		||||
      english_stemmer: {
 | 
			
		||||
        type: 'stemmer',
 | 
			
		||||
        language: 'english',
 | 
			
		||||
      },
 | 
			
		||||
 | 
			
		||||
      english_possessive_stemmer: {
 | 
			
		||||
        type: 'stemmer',
 | 
			
		||||
        language: 'possessive_english',
 | 
			
		||||
      },
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    analyzer: {
 | 
			
		||||
      content: {
 | 
			
		||||
        tokenizer: 'uax_url_email',
 | 
			
		||||
        filter: %w(
 | 
			
		||||
          english_possessive_stemmer
 | 
			
		||||
          lowercase
 | 
			
		||||
          asciifolding
 | 
			
		||||
          cjk_width
 | 
			
		||||
          english_stop
 | 
			
		||||
          english_stemmer
 | 
			
		||||
        ),
 | 
			
		||||
      },
 | 
			
		||||
    },
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  index_scope ::Status.unscoped
 | 
			
		||||
                      .kept
 | 
			
		||||
                      .indexable
 | 
			
		||||
                      .includes(:media_attachments, :preloadable_poll, :preview_cards)
 | 
			
		||||
 | 
			
		||||
  root date_detection: false do
 | 
			
		||||
    field(:id, type: 'keyword')
 | 
			
		||||
    field(:account_id, type: 'long')
 | 
			
		||||
    field(:text, type: 'text', analyzer: 'whitespace', value: ->(status) { status.searchable_text }) { field(:stemmed, type: 'text', analyzer: 'content') }
 | 
			
		||||
    field(:language, type: 'keyword')
 | 
			
		||||
    field(:properties, type: 'keyword', value: ->(status) { status.searchable_properties })
 | 
			
		||||
    field(:created_at, type: 'date')
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
@@ -1,23 +1,24 @@
 | 
			
		||||
# frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
class StatusesIndex < Chewy::Index
 | 
			
		||||
  include FormattingHelper
 | 
			
		||||
 | 
			
		||||
  settings index: index_preset(refresh_interval: '30s', number_of_shards: 5), analysis: {
 | 
			
		||||
    filter: {
 | 
			
		||||
      english_stop: {
 | 
			
		||||
        type: 'stop',
 | 
			
		||||
        stopwords: '_english_',
 | 
			
		||||
      },
 | 
			
		||||
 | 
			
		||||
      english_stemmer: {
 | 
			
		||||
        type: 'stemmer',
 | 
			
		||||
        language: 'english',
 | 
			
		||||
      },
 | 
			
		||||
 | 
			
		||||
      english_possessive_stemmer: {
 | 
			
		||||
        type: 'stemmer',
 | 
			
		||||
        language: 'possessive_english',
 | 
			
		||||
      },
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    analyzer: {
 | 
			
		||||
      content: {
 | 
			
		||||
        tokenizer: 'uax_url_email',
 | 
			
		||||
@@ -35,7 +36,7 @@ class StatusesIndex < Chewy::Index
 | 
			
		||||
 | 
			
		||||
  # We do not use delete_if option here because it would call a method that we
 | 
			
		||||
  # expect to be called with crutches without crutches, causing n+1 queries
 | 
			
		||||
  index_scope ::Status.unscoped.kept.without_reblogs.includes(:media_attachments, :preloadable_poll)
 | 
			
		||||
  index_scope ::Status.unscoped.kept.without_reblogs.includes(:media_attachments, :preloadable_poll, :preview_cards)
 | 
			
		||||
 | 
			
		||||
  crutch :mentions do |collection|
 | 
			
		||||
    data = ::Mention.where(status_id: collection.map(&:id)).where(account: Account.local, silent: false).pluck(:status_id, :account_id)
 | 
			
		||||
@@ -63,13 +64,12 @@ class StatusesIndex < Chewy::Index
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  root date_detection: false do
 | 
			
		||||
    field :id, type: 'long'
 | 
			
		||||
    field :account_id, type: 'long'
 | 
			
		||||
 | 
			
		||||
    field :text, type: 'text', value: ->(status) { status.searchable_text } do
 | 
			
		||||
      field :stemmed, type: 'text', analyzer: 'content'
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    field :searchable_by, type: 'long', value: ->(status, crutches) { status.searchable_by(crutches) }
 | 
			
		||||
    field(:id, type: 'keyword')
 | 
			
		||||
    field(:account_id, type: 'long')
 | 
			
		||||
    field(:text, type: 'text', analyzer: 'whitespace', value: ->(status) { status.searchable_text }) { field(:stemmed, type: 'text', analyzer: 'content') }
 | 
			
		||||
    field(:searchable_by, type: 'long', value: ->(status, crutches) { status.searchable_by(crutches) })
 | 
			
		||||
    field(:language, type: 'keyword')
 | 
			
		||||
    field(:properties, type: 'keyword', value: ->(status) { status.searchable_properties })
 | 
			
		||||
    field(:created_at, type: 'date')
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user