用searchkick搜索postgresql数组



我有一个搜索功能,我想通过各种字段搜索。我已经使用multi_search从不同的模型寻找不同的记录。

@entries_result = Post.search(params[:q].presence || '*',
fields: ['title^10', 'content', 'rating', 'parent_id', 'tags'],
...
where: { parent_id: @parent.id },
limit: 3)
@categories_result = Category.search(params[:q].presence || '*', ...)
@tags_result = Post.search(params[:q].presence || '*',
fields: ['tags'],
match: :word_start,
highlight: true,
misspellings: { below: 3 },
where: { parent_id: @parent.id, tags: params[:q] })
Searchkick.multi_search([@categories_result, @entries_result, @tags_result])
@tags_result.map(:&tags)

正如你所看到的,我搜索了两次Post model,因为我需要

  1. 具有特定名称的帖子(显示在搜索结果顶部)
  2. 标签是psql中的数组,我将在搜索结果
  3. 的一侧显示
#  tags :text default([]), is an Array, indexed

我不知道如何找到这些标签是由params[:q]搜索的结果。我知道Elasticsearch可以在文档中搜索这些数组,但我找不到关于如何使用searchkick gem做到这一点的任何信息。例如,当params[:q]dog时,我想搜索以关键字dog开头的帖子以及以关键字dog开头的标签。

Rails 7, gems opensearch (2.0.0), searchkick (5.0.3)

我最终构建了一个高级查询,因为它也可以在searchkick中使用elasticsearch/opensearch查询,下面的代码对我来说工作得很好。

@tags_result = Post.search(body:
{ query: {
bool: {
should: [
prefix: {
tags: params[:q].presence || '*',
},
],
filter: {
term: {
parent_id: @parent.id,
},
},
},
} })