Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5171c81384 |
@@ -175,6 +175,9 @@ gem 'pgvector'
|
|||||||
# Convert Website HTML to Markdown
|
# Convert Website HTML to Markdown
|
||||||
gem 'reverse_markdown'
|
gem 'reverse_markdown'
|
||||||
|
|
||||||
|
gem 'opensearch-ruby'
|
||||||
|
gem 'searchkick'
|
||||||
|
|
||||||
### Gems required only in specific deployment environments ###
|
### Gems required only in specific deployment environments ###
|
||||||
##############################################################
|
##############################################################
|
||||||
|
|
||||||
|
|||||||
@@ -532,6 +532,9 @@ GEM
|
|||||||
omniauth-rails_csrf_protection (1.0.2)
|
omniauth-rails_csrf_protection (1.0.2)
|
||||||
actionpack (>= 4.2)
|
actionpack (>= 4.2)
|
||||||
omniauth (~> 2.0)
|
omniauth (~> 2.0)
|
||||||
|
opensearch-ruby (3.4.0)
|
||||||
|
faraday (>= 1.0, < 3)
|
||||||
|
multi_json (>= 1.0)
|
||||||
openssl (3.2.0)
|
openssl (3.2.0)
|
||||||
orm_adapter (0.5.0)
|
orm_adapter (0.5.0)
|
||||||
os (1.1.4)
|
os (1.1.4)
|
||||||
@@ -703,6 +706,9 @@ GEM
|
|||||||
parser
|
parser
|
||||||
scss_lint (0.60.0)
|
scss_lint (0.60.0)
|
||||||
sass (~> 3.5, >= 3.5.5)
|
sass (~> 3.5, >= 3.5.5)
|
||||||
|
searchkick (5.4.0)
|
||||||
|
activemodel (>= 6.1)
|
||||||
|
hashie
|
||||||
seed_dump (3.3.1)
|
seed_dump (3.3.1)
|
||||||
activerecord (>= 4)
|
activerecord (>= 4)
|
||||||
activesupport (>= 4)
|
activesupport (>= 4)
|
||||||
@@ -910,6 +916,7 @@ DEPENDENCIES
|
|||||||
omniauth-google-oauth2 (>= 1.1.3)
|
omniauth-google-oauth2 (>= 1.1.3)
|
||||||
omniauth-oauth2
|
omniauth-oauth2
|
||||||
omniauth-rails_csrf_protection (~> 1.0, >= 1.0.2)
|
omniauth-rails_csrf_protection (~> 1.0, >= 1.0.2)
|
||||||
|
opensearch-ruby
|
||||||
pg
|
pg
|
||||||
pg_search
|
pg_search
|
||||||
pgvector
|
pgvector
|
||||||
@@ -935,6 +942,7 @@ DEPENDENCIES
|
|||||||
rubocop-rspec
|
rubocop-rspec
|
||||||
scout_apm
|
scout_apm
|
||||||
scss_lint
|
scss_lint
|
||||||
|
searchkick
|
||||||
seed_dump
|
seed_dump
|
||||||
sentry-rails (>= 5.19.0)
|
sentry-rails (>= 5.19.0)
|
||||||
sentry-ruby
|
sentry-ruby
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
class Migration::Search::MessageReindexJob < ApplicationJob
|
||||||
|
queue :searchkick
|
||||||
|
|
||||||
|
|
||||||
|
end
|
||||||
@@ -38,6 +38,10 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
class Message < ApplicationRecord
|
class Message < ApplicationRecord
|
||||||
|
searchkick batch_size: 10_000 if SearchConfig.enabled?
|
||||||
|
|
||||||
|
scope :search_import, -> { includes(:inbox, :conversation, :sender) }
|
||||||
|
|
||||||
include MessageFilterHelpers
|
include MessageFilterHelpers
|
||||||
include Liquidable
|
include Liquidable
|
||||||
NUMBER_OF_PERMITTED_ATTACHMENTS = 15
|
NUMBER_OF_PERMITTED_ATTACHMENTS = 15
|
||||||
|
|||||||
@@ -34,11 +34,22 @@ class SearchService
|
|||||||
end
|
end
|
||||||
|
|
||||||
def filter_messages
|
def filter_messages
|
||||||
@messages = current_account.messages.where(inbox_id: accessable_inbox_ids)
|
@messages = if SearchConfig.enabled?
|
||||||
.where('messages.content ILIKE :search', search: "%#{search_query}%")
|
Message.search(
|
||||||
.where('created_at >= ?', 3.months.ago)
|
search_query, where: {
|
||||||
.reorder('created_at DESC')
|
inbox_id: accessable_inbox_ids,
|
||||||
.limit(10)
|
account_id: current_account.id
|
||||||
|
}, order: { created_at: :desc }, limit: 20
|
||||||
|
)
|
||||||
|
else
|
||||||
|
current_account
|
||||||
|
.messages
|
||||||
|
.where(inbox_id: accessable_inbox_ids)
|
||||||
|
.where('messages.content ILIKE :search', search: "%#{search_query}%")
|
||||||
|
.where('created_at >= ?', 3.months.ago)
|
||||||
|
.reorder('created_at DESC')
|
||||||
|
.limit(10)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def filter_contacts
|
def filter_contacts
|
||||||
|
|||||||
@@ -0,0 +1,32 @@
|
|||||||
|
class SearchConfig
|
||||||
|
class << self
|
||||||
|
def enabled?
|
||||||
|
opensearch_url.present?
|
||||||
|
end
|
||||||
|
|
||||||
|
def setup!
|
||||||
|
return unless enabled?
|
||||||
|
|
||||||
|
Searchkick.client_options = client_options
|
||||||
|
end
|
||||||
|
|
||||||
|
def client_options
|
||||||
|
{
|
||||||
|
url: opensearch_url,
|
||||||
|
transport_options: {
|
||||||
|
request: { timeout: timeout }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def opensearch_url
|
||||||
|
ENV.fetch('OPENSEARCH_URL', nil)
|
||||||
|
end
|
||||||
|
|
||||||
|
def timeout
|
||||||
|
ENV.fetch('OPENSEARCH_TIMEOUT', 10).to_i
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
+16
-16
@@ -8,21 +8,21 @@ internal_check_new_versions_job:
|
|||||||
class: 'Internal::CheckNewVersionsJob'
|
class: 'Internal::CheckNewVersionsJob'
|
||||||
queue: scheduled_jobs
|
queue: scheduled_jobs
|
||||||
|
|
||||||
# executed At every 5th minute..
|
# # executed At every 5th minute..
|
||||||
trigger_scheduled_items_job:
|
# trigger_scheduled_items_job:
|
||||||
cron: '*/5 * * * *'
|
# cron: '*/5 * * * *'
|
||||||
class: 'TriggerScheduledItemsJob'
|
# class: 'TriggerScheduledItemsJob'
|
||||||
queue: scheduled_jobs
|
# queue: scheduled_jobs
|
||||||
|
|
||||||
# executed At every minute..
|
# # executed At every minute..
|
||||||
trigger_imap_email_inboxes_job:
|
# trigger_imap_email_inboxes_job:
|
||||||
cron: '*/1 * * * *'
|
# cron: '*/1 * * * *'
|
||||||
class: 'Inboxes::FetchImapEmailInboxesJob'
|
# class: 'Inboxes::FetchImapEmailInboxesJob'
|
||||||
queue: scheduled_jobs
|
# queue: scheduled_jobs
|
||||||
|
|
||||||
# executed daily at 2230 UTC
|
# # executed daily at 2230 UTC
|
||||||
# which is our lowest traffic time
|
# # which is our lowest traffic time
|
||||||
remove_stale_contact_inboxes_job.rb:
|
# remove_stale_contact_inboxes_job.rb:
|
||||||
cron: '30 22 * * *'
|
# cron: '30 22 * * *'
|
||||||
class: 'Internal::RemoveStaleContactInboxesJob'
|
# class: 'Internal::RemoveStaleContactInboxesJob'
|
||||||
queue: scheduled_jobs
|
# queue: scheduled_jobs
|
||||||
|
|||||||
@@ -23,6 +23,7 @@
|
|||||||
- action_mailbox_routing
|
- action_mailbox_routing
|
||||||
- low
|
- low
|
||||||
- scheduled_jobs
|
- scheduled_jobs
|
||||||
|
- searchkick
|
||||||
- async_database_migration
|
- async_database_migration
|
||||||
- active_storage_analysis
|
- active_storage_analysis
|
||||||
- active_storage_purge
|
- active_storage_purge
|
||||||
|
|||||||
Reference in New Issue
Block a user