gpt4 book ai didi

mysql - 来自 MySQL JDBC river 的 Elasticsearch 过滤结果

转载 作者:行者123 更新时间:2023-11-30 23:14:28 24 4
gpt4 key购买 nike

在我的 Rails 应用程序中使用 Tire 与 Elasticsearch 通信。到目前为止,一切正常。

问题是索引一些外部数据源。

我有其他资源没有在 Rails 中更新,我正在使用 Elasticsearch river JDBC plugin每 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 在 tire 索引时被映射为一个数组。

def to_indexed_json
to_json methods: [:location_users]
end

def location_users
location.users.map(&:id) if location
end

(我不希望用户搜索别人的会计数据)

使用 river,我编写了一些 sql 以从 MySQL 获取数据和关联的表列。我可以获得 location_users 列表的唯一方法是执行以下操作:

SELECT a.*, l.location_name, GROUP_CONCAT(lu.id) as location_users FROM accounts...

这给了我一个用逗号分隔值的 location_users 字段。但显然不是数组。

现在当我搜索时,我得到零个结果,因为过滤器正在寻找一个数组,而它只是一个返回的列表。

有没有办法将这个字段作为数组索引?或者有没有办法改变过滤器使其再次工作?

最佳答案

您可以像这样重写 SQl:

SELECT a.*, l.location_name, GROUP_CONCAT(lu.id) as `location_users[]` FROM accounts...

当一个字段名以'[]'结尾时,Elasticsearch river JDBC插件会通过拆分值(使用逗号作为分隔符)将值转换为数组并存储。所以字段数据'1, 2, 3, 4, 5'在索引时会变成[1, 2, 3, 4, 5]

关于mysql - 来自 MySQL JDBC river 的 Elasticsearch 过滤结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18589201/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com