I finally wrote my controller action as follows
require 'will_paginate/array'
def search
@items = PgSearch.multisearch(params["search"])
@items = @items.map { |item| item.searchable.document }.compact.uniq
@items = @items.paginate(per_page: 5, page: params[:page])
end
where each searchable model has a document property, "deciding" whether to include the result or not, and if so, which "document". This can be as simple as checking its language:
def document
self if locale == I18n.locale.to_s
end
or can be more complex, propagating its "document" property to its parent, e.g. in case of a polymorphic comment:
def document
commentable.document
end