[英]Avoid n+1 query when indexing on elasticsearch rails
我有一個Genre
模型,它的名字翻譯在genre_translations表中(使用globalize gem)
我正在嘗試使用elasticsearch-rails gem索引模型
def as_indexed_json(options = {})
as_json(
only: %i(type available),
methods: %i(name),
)
end
但是當我做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]]
...
有關如何使用連接索引所有Genre
項目以避免N + 1行為的任何建議?
來自這里的文檔
# @example Pass an ActiveRecord query to limit the imported records
#
# Article.import query: -> { where(author_id: author_id) }
所以你可以這樣做:
Genre.import query: -> { includes(:translations) }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.