feat: Separate indexing with the search feature (#12503)

With this change, the indexing would be separate from the search, so you
need to enable indexing on the cloud and run it. It should start
indexing the messages to ElasticSearch/OpenSearch. Once indexing is
completed, we can turn on the feature for the customer.


Make sure that the following is done when you deploy.
Set POSTGRES_STATEMENT_TIMEOUT=600s before you run the indexing.

1. Make sure that the account with advanced_search has
advanced_search_indexing enabled
```rb
Account.feature_advanced_search.each do |account|
  account.enable_features(:advanced_search_indexing)
  account.save!
end
```

2. Enable indexing for all accounts with paid subscription.
```rb
Account.where("custom_attributes ->> 'plan_name' IN (?)", ['Enterprise', 'Startups', 'Business']).each do |account|
account.enable_features(:advanced_search_indexing)
  account.save!
end
```

3. Run indexing for all the messages.
```rb
Message.reindex
```

Co-authored-by: Vishnu Narayanan <iamwishnu@gmail.com>
Co-authored-by: Muhsin Keloth <muhsinkeramam@gmail.com>
This commit is contained in:
Pranav
2025-09-24 01:41:15 -07:00
committed by GitHub
parent 9f14e6abb6
commit eadbddaa9f
4 changed files with 30 additions and 4 deletions

View File

@@ -621,7 +621,7 @@ RSpec.describe Message do
before do
allow(ChatwootApp).to receive(:advanced_search_allowed?).and_return(true)
account.enable_features('advanced_search')
account.enable_features('advanced_search_indexing')
end
context 'when advanced search is not allowed globally' do
@@ -634,9 +634,10 @@ RSpec.describe Message do
end
end
context 'when advanced search feature is not enabled for account' do
context 'when advanced search feature is not enabled for account on chatwoot cloud' do
before do
account.disable_features('advanced_search')
allow(ChatwootApp).to receive(:chatwoot_cloud?).and_return(true)
account.disable_features('advanced_search_indexing')
end
it 'returns false' do
@@ -644,6 +645,17 @@ RSpec.describe Message do
end
end
context 'when advanced search feature is not enabled for account on self-hosted' do
before do
allow(ChatwootApp).to receive(:chatwoot_cloud?).and_return(false)
account.disable_features('advanced_search_indexing')
end
it 'returns true' do
expect(message.should_index?).to be true
end
end
context 'when message type is not incoming or outgoing' do
before do
message.message_type = 'activity'