dca*_*iro 1 optimization ruby-on-rails elasticsearch
我有一个Genre模型,其名称在genre_translations表中翻译(使用globalize gem)
我正在尝试使用elasticsearch-rails gem为模型建立索引
def as_indexed_json(options = {})
as_json(
only: %i(type available),
methods: %i(name),
)
end
Run Code Online (Sandbox Code Playgroud)
但是当我这样做时,Genre.import我在 Rails 控制台上看到以下内容:
[1] pry(main)> Genre.import
Genre Load (27.1ms) SELECT "genres".* FROM "genres" ORDER BY "genres"."id" ASC LIMIT 1000
Genre::Translation Load (23.9ms) SELECT "genre_translations".* FROM "genre_translations" WHERE "genre_translations"."genre_id" = $1 [["genre_id", 1]]
Genre::Translation Load (0.3ms) SELECT "genre_translations".* FROM "genre_translations" WHERE "genre_translations"."genre_id" = $1 [["genre_id", 2]]
Genre::Translation Load (0.3ms) SELECT "genre_translations".* FROM "genre_translations" WHERE "genre_translations"."genre_id" = $1 [["genre_id", 3]]
...
Run Code Online (Sandbox Code Playgroud)
关于如何使用Genre连接索引所有项目以避免 N+1 行为有什么建议吗?
从这里的文档
# @example Pass an ActiveRecord query to limit the imported records
#
# Article.import query: -> { where(author_id: author_id) }
Run Code Online (Sandbox Code Playgroud)
所以你可以这样做:
Genre.import query: -> { includes(:translations) }
Run Code Online (Sandbox Code Playgroud)