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
(ユーザーに他人の会計データを検索させたくありません)
川を使用して、MySQL からデータと関連するテーブル列を取得するための SQL をいくつか書きました。location_users のリストを取得できる唯一の方法は、次のようにすることでした。
SELECT a.*, l.location_name, GROUP_CONCAT(lu.id) as location_users FROM accounts...
これにより、カンマ区切りの値を持つ location_users フィールドが得られました。しかし、明らかに配列ではありません。
検索すると、フィルターが配列を探していて、返されたのは単なるリストであるため、結果はゼロです。
このフィールドを配列としてインデックス付けする方法はありますか? または、再び機能するようにフィルターを変更する方法はありますか?