簡體   English   中英

在elasticsearch rails上建立索引時避免使用n + 1查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM