forked from mastodon/mastodon
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Full-text search for authorized statuses (mastodon#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 mastodon#5880 Fix mastodon#4293 Fix mastodon#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
- Loading branch information
Showing
13 changed files
with
230 additions
and
5 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
# frozen_string_literal: true | ||
|
||
class StatusesIndex < Chewy::Index | ||
settings index: { refresh_interval: '15m' }, 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 | ||
), | ||
}, | ||
}, | ||
} | ||
|
||
define_type ::Status.without_reblogs do | ||
crutch :mentions do |collection| | ||
data = ::Mention.where(status_id: collection.map(&:id)).pluck(:status_id, :account_id) | ||
data.each.with_object({}) { |(id, name), result| (result[id] ||= []).push(name) } | ||
end | ||
|
||
crutch :favourites do |collection| | ||
data = ::Favourite.where(status_id: collection.map(&:id)).pluck(:status_id, :account_id) | ||
data.each.with_object({}) { |(id, name), result| (result[id] ||= []).push(name) } | ||
end | ||
|
||
crutch :reblogs do |collection| | ||
data = ::Status.where(reblog_of_id: collection.map(&:id)).pluck(:reblog_of_id, :account_id) | ||
data.each.with_object({}) { |(id, name), result| (result[id] ||= []).push(name) } | ||
end | ||
|
||
root date_detection: false do | ||
field :account_id, type: 'long' | ||
|
||
field :text, type: 'text', value: ->(status) { [status.spoiler_text, Formatter.instance.plaintext(status)].join("\n\n") } do | ||
field :stemmed, type: 'text', analyzer: 'content' | ||
end | ||
|
||
field :searchable_by, type: 'long', value: ->(status, crutches) { status.searchable_by(crutches) } | ||
field :created_at, type: 'date' | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
enabled = ENV['ES_ENABLED'] == 'true' | ||
host = ENV.fetch('ES_HOST') { 'localhost' } | ||
port = ENV.fetch('ES_PORT') { 9200 } | ||
fallback_prefix = ENV.fetch('REDIS_NAMESPACE') { nil } | ||
prefix = ENV.fetch('ES_PREFIX') { fallback_prefix } | ||
|
||
Chewy.settings = { | ||
host: "#{host}:#{port}", | ||
prefix: prefix, | ||
enabled: enabled, | ||
journal: false, | ||
} | ||
|
||
Chewy.root_strategy = enabled ? :sidekiq : :bypass | ||
|
||
module Chewy | ||
class << self | ||
def enabled? | ||
settings[:enabled] | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters