我试图通过种类和聚合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"
的明确指示会错过别名。
问题是可以做些什么?看起来像死路一条。
答案 0 :(得分:0)
您尝试使用search_import
范围做什么? searchkick docs表示要对您要编制索引的记录进行范围调整,因此应返回ActiveRecord::Relation
,而不是group
哈希。
Searchkick使用find_in_batches导入文档。急切加载 关联,使用search_import范围。
...
默认情况下,所有记录都已编入索引。控制哪些记录 索引,使用should_index?方法与search_import一起使用 范围。
答案 1 :(得分:0)
我最终创建了单独的模型PageFragmentAgg
并向PageFragment
添加了回调,以便重建应编入索引的连接数据。