1

我在 Rails 5 应用程序中为 Postgres 使用 Trigram 模块 (pg_trgm) 进行文本搜索。我已经能够使用以下调用成功找到令人满意的结果,以查找名称与查询相似的记录的限制数量:

  def self.glance(query, limit = 10)
    find_by_sql(['select *, name <-> ? as confidence from studies order by confidence limit ?', query, limit])
  end

我现在想扩展结果以包括每条记录的相似性函数的值和用于显示 的目标查询。

我相信我应该设置一个范围(或类方法),我可以在其中对距离运算符(名称 <-> ?)进行参数化调用,然后返回值,就好像它是数据库模型中的一个属性一样。

我可以就执行此操作的最佳做​​法提出建议吗?谢谢你。

4

1 回答 1

0

如果您在study模型上,我认为您可以使用范围和 LIKE 实现如下:

scope :glance, ->(query, limit = 10) { where('name LIKE %?%', query).order(:confidence).limit(limit) }
于 2018-09-04T00:35:55.557 回答