add onprem search reindex

pull/493/head
Pete Matsyburka 4 months ago
parent 47b235dc5f
commit 35852ef6ab

@ -0,0 +1,17 @@
# frozen_string_literal: true
class SearchEntriesReindexController < ApplicationController
def create
authorize!(:manage, EncryptedConfig)
ReindexAllSearchEntriesJob.perform_async
AccountConfig.find_or_initialize_by(account_id: Account.minimum(:id), key: :fulltext_search)
.update!(value: true)
Docuseal.instance_variable_set(:@fulltext_search, nil)
redirect_back(fallback_location: settings_account_path,
notice: "Started building search index. Visit #{root_url}jobs/busy to check progress.")
end
end

@ -34,6 +34,7 @@ class SetupController < ApplicationController
{ key: EncryptedConfig::ESIGN_CERTS_KEY, value: GenerateCertificate.call.transform_values(&:to_pem) } { key: EncryptedConfig::ESIGN_CERTS_KEY, value: GenerateCertificate.call.transform_values(&:to_pem) }
] ]
@account.encrypted_configs.create!(encrypted_configs) @account.encrypted_configs.create!(encrypted_configs)
@account.account_configs.create!(key: :fulltext_search, value: true) if SearchEntry.table_exists?
Docuseal.refresh_default_url_options! Docuseal.refresh_default_url_options!

@ -22,7 +22,7 @@ class SubmittersAutocompleteController < ApplicationController
def search_submitters(submitters) def search_submitters(submitters)
if SELECT_COLUMNS.include?(params[:field]) if SELECT_COLUMNS.include?(params[:field])
if Docuseal.fulltext_search?(current_user) if Docuseal.fulltext_search?
Submitters.fulltext_search_field(current_user, submitters, params[:q], params[:field]) Submitters.fulltext_search_field(current_user, submitters, params[:q], params[:field])
else else
column = Submitter.arel_table[params[:field].to_sym] column = Submitter.arel_table[params[:field].to_sym]

@ -0,0 +1,9 @@
# frozen_string_literal: true
class ReindexAllSearchEntriesJob
include Sidekiq::Job
def perform
SearchEntries.reindex_all
end
end

@ -165,6 +165,14 @@
<% end %> <% end %>
<% end %> <% end %>
<% end %> <% end %>
<% if !Docuseal.multitenant? && SearchEntry.table_exists? && (!Docuseal.fulltext_search? || params[:reindex] == 'true') && can?(:manage, EncryptedConfig) %>
<div class="flex items-center justify-between py-2.5">
<span>
Efficient search with search index
</span>
<%= button_to params[:reindex] == 'true' ? 'Reindex' : 'Build Search Index', settings_search_entries_reindex_index_path, method: :post, class: 'btn btn-sm btn-neutral text-white px-4' %>
</div>
<% end %>
</div> </div>
<% end %> <% end %>
<%= render 'compliances' %> <%= render 'compliances' %>

@ -163,6 +163,7 @@ Rails.application.routes.draw do
scope '/settings', as: :settings do scope '/settings', as: :settings do
unless Docuseal.multitenant? unless Docuseal.multitenant?
resources :storage, only: %i[index create], controller: 'storage_settings' resources :storage, only: %i[index create], controller: 'storage_settings'
resources :search_entries_reindex, only: %i[create]
resources :sms, only: %i[index], controller: 'sms_settings' resources :sms, only: %i[index], controller: 'sms_settings'
end end
resources :email, only: %i[index create], controller: 'email_smtp_settings' resources :email, only: %i[index create], controller: 'email_smtp_settings'

@ -73,12 +73,15 @@ module Docuseal
@default_pkcs ||= GenerateCertificate.load_pkcs(Docuseal::CERTS) @default_pkcs ||= GenerateCertificate.load_pkcs(Docuseal::CERTS)
end end
def fulltext_search?(_user) def fulltext_search?
return false unless SearchEntry.table_exists? return @fulltext_search unless @fulltext_search.nil?
return true if Docuseal.multitenant?
return true if Rails.env.local? @fulltext_search =
if SearchEntry.table_exists?
false Docuseal.multitenant? ? true : AccountConfig.exists?(key: :fulltext_search, value: true)
else
false
end
end end
def enable_pwa? def enable_pwa?

@ -8,7 +8,7 @@ module Submissions
module_function module_function
def search(current_user, submissions, keyword, search_values: false, search_template: false) def search(current_user, submissions, keyword, search_values: false, search_template: false)
if Docuseal.fulltext_search?(current_user) if Docuseal.fulltext_search?
fulltext_search(current_user, submissions, keyword, search_template:) fulltext_search(current_user, submissions, keyword, search_template:)
else else
plain_search(submissions, keyword, search_values:, search_template:) plain_search(submissions, keyword, search_values:, search_template:)

@ -14,7 +14,7 @@ module Submitters
module_function module_function
def search(current_user, submitters, keyword) def search(current_user, submitters, keyword)
if Docuseal.fulltext_search?(current_user) if Docuseal.fulltext_search?
fulltext_search(current_user, submitters, keyword) fulltext_search(current_user, submitters, keyword)
else else
plain_search(submitters, keyword) plain_search(submitters, keyword)

@ -38,7 +38,7 @@ module Templates
end end
def search(current_user, templates, keyword) def search(current_user, templates, keyword)
if Docuseal.fulltext_search?(current_user) if Docuseal.fulltext_search?
fulltext_search(current_user, templates, keyword) fulltext_search(current_user, templates, keyword)
else else
plain_search(templates, keyword) plain_search(templates, keyword)

Loading…
Cancel
Save