Searchkick:使用group子句导入范围

时间:2017-11-14 18:48:15

标签: ruby-on-rails postgresql activerecord searchkick

我试图通过种类和聚合html内容对页面片段进行分组。 以下是我的搜索导入范围:

scope :search_import, -> {
  select("kind, string_agg(html_content, '\r\n') AS html_content")
  .group(:kind)
}

当我尝试重新索引记录时searchkick使用find_in_batches自动设置主键上升的顺序以使批量排序工作。这导致我出现以下错误:column "page_fragments.id" must appear in the GROUP BY clause or be used in an aggregate function

显然,我无法将id添加到群组条款中,并且我已尝试通过向select:id添加COUNT (*) AS id聚合来解决此问题。但是,订单子句中主键"page_fragments"."id"的明确指示会错过别名。

问题是可以做些什么?看起来像死路一条。

2 个答案:

答案 0 :(得分:0)

您尝试使用search_import范围做什么? searchkick docs表示要对您要编制索引的记录进行范围调整,因此应返回ActiveRecord::Relation,而不是group哈希。

  

Searchkick使用find_in_batches导入文档。急切加载   关联,使用search_import范围。

     

...

     

默认情况下,所有记录都已编入索引。控制哪些记录   索引,使用should_index?方法与search_import一起使用   范围。

答案 1 :(得分:0)

我最终创建了单独的模型PageFragmentAgg并向PageFragment添加了回调,以便重建应编入索引的连接数据。