ruby Rails sunspot重新索引特定模式

uttx8gqw  于 2023-03-12  发布在  Ruby
关注(0)|答案(1)|浏览(106)

bounty将在3天后过期。回答此问题可获得+50声望奖励。wiwit希望引起更多人关注此问题。

我使用的是rails-on-services/apartment,这是针对Rails和ActiveRecord的多租户
我的设置是,每次我创建一个租户时,gem都会自动为新租户创建一个特定的模式。
每次我运行rails sunspot:reindex的记录将不会出现在搜索级别。但在ActiveRecord(ex.Client.all)的记录是有。
我的理论是我创建的租户没有重新索引。有没有办法重新索引特定的模式?或者我错过了什么?

sf6xfgos

sf6xfgos1#

新租户的记录可能没有被索引,因为Sunspot配置不知道由apartment gem创建的新模式。一个可能的解决方案是设计您自己的Sunspot::设置架构搜索路径以在SessionProxy中包含新架构。以下是您在config/initializers/sunspot.rb中的操作方法:

class TenantSessionProxy < Sunspot::Rails::Server::Proxy::Delayed
  def solr_execute(client, request_context)
    # Use the apartment gem to get the current tenant's schema name
    schema_name = Apartment::Tenant.current_tenant
    # Set the search_path to include the current schema
    ActiveRecord::Base.connection.schema_search_path = schema_name
    # Call the original solr_execute method with the modified search_path
    super(client, request_context)
  end

end

Sunspot.session = Sunspot::Rails.build_session({
  proxy: TenantSessionProxy.new,
})

但是,您必须知道,修改schema_search_path将影响ActiveRecord在当前线程中执行的所有查询。您必须在Sunspot重新索引完成后将其还原为原始schema_search_path值。

相关问题