在我的 Rails 应用程序中使用 Tire 与 Elasticsearch 进行通信。到目前为止,一切正常。
问题是索引一些外部数据源。
我有其他未在 Rails 中更新的源,并且正在使用Elasticsearch River JDBC 插件每 60 秒轮询一次数据库以获取此信息。
此数据可在 Rails 应用程序中访问。在其他模型中,我使用了一个简单的过滤器来限制用户对搜索数据的访问:
def self.search(params)
tire.search(page: params[:page], per_page: 50) do |s|
...
filter << { :terms => { location_users: [params[:user_id]] }} if params[:user_id]
...
end
end
其中 location_users 在轮胎索引期间被映射为数组。
def to_indexed_json
to_json methods: [:location_users]
end
def location_users
location.users.map(&:id) if location
end
(我不希望用户搜索其他人的会计数据)
使用河流,我编写了一些 sql 来从 MySQL 获取数据和关联的表列。我可以获得 location_users 列表的唯一方法是执行以下操作:
SELECT a.*, l.location_name, GROUP_CONCAT(lu.id) as location_users FROM accounts...
这给了我一个带有逗号分隔值的 location_users 字段。但显然不是数组。
现在当我搜索时,我得到零个结果,因为过滤器正在寻找一个数组,它只是一个返回的列表。
有没有办法可以将此字段索引为数组?或者有没有办法改变过滤器,让它再次工作?