【发布时间】:2015-05-21 19:36:42
【问题描述】:
我有一个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 行为的任何建议?
【问题讨论】:
-
你能解释一下你所说的“N+1 行为”是什么意思吗?你的实际问题是什么?
-
@MaxWilliams 问题是当从流派和流派翻译表中获取数据时,它应该在单个查询中完成。它不应该进行查询以获取流派,然后对每种流派进行 1 次查询以获取名称。你可以在这里找到详细的解释:sitepoint.com/silver-bullet-n1-problem
标签: ruby-on-rails optimization elasticsearch