Postgresql的to_tsvector()函数的Rails activeRecord版本

Postgresql的to_tsvector()函数的Rails activeRecord版本,postgresql,ruby-on-rails-5,tsvector,Postgresql,Ruby On Rails 5,Tsvector,我的数据库中有一个TSVECTOR列,我想通过Rails回调而不是触发器来更新该列。我想知道是否有一个ActiveRecord代码来实现这一点。到目前为止,我是通过手动执行原始SQL来实现这一点的,但它看起来并不好 ActiveRecord::Base.connection.execute("update my_table set tsvector_document = to_tsvector('english', #{string_tokens}) where id = #{id}") 我想

我的数据库中有一个TSVECTOR列,我想通过Rails回调而不是触发器来更新该列。我想知道是否有一个ActiveRecord代码来实现这一点。到目前为止,我是通过手动执行原始SQL来实现这一点的,但它看起来并不好

ActiveRecord::Base.connection.execute("update my_table set tsvector_document = to_tsvector('english', #{string_tokens}) where id = #{id}")
我想知道是否有更好的方法不用使用原始SQL就可以做到这一点


提前感谢。

我最终使用rails的PG搜索插件处理TS向量转换

PgSearch.multisearch_options = {
  using: {
    tsearch: {
      prefix: true,
      dictionary: 'english',
      tsvector_column: 'vector_column_name_here'
    },
    trigram: {
      threshold: 0.2
    }
  }
}

我最终使用rails的PG搜索插件来处理TS向量转换

PgSearch.multisearch_options = {
  using: {
    tsearch: {
      prefix: true,
      dictionary: 'english',
      tsvector_column: 'vector_column_name_here'
    },
    trigram: {
      threshold: 0.2
    }
  }
}

这肯定会导致性能更差(额外的客户机-服务器往返)。为什么你想要这样一个列而不是底层数据的表达式索引?@LaurenzAlbe你能详细说明一下吗?该列是来自不同模型的差异数据的组合。我使用它进行搜索,我需要tsvector列的功能来实现所需的搜索行为。不能在多个表上有一个索引。不过,我认为触发器是满足此类需求的正确解决方案,因为它与数据修改语句在同一事务中运行,因此一致性会自动得到保证。如果你有(不严格的)严格要求不使用PostgreSQL作为数据库,而是滥用它作为一个关键值存储,那么只考虑替代方案。我最初没有考虑触发器的原因是由于可能的性能问题。但我现在会重新考虑使用它。感谢保证性能更差(额外的客户机-服务器往返)。为什么你想要这样一个列而不是底层数据的表达式索引?@LaurenzAlbe你能详细说明一下吗?该列是来自不同模型的差异数据的组合。我使用它进行搜索,我需要tsvector列的功能来实现所需的搜索行为。不能在多个表上有一个索引。不过,我认为触发器是满足此类需求的正确解决方案,因为它与数据修改语句在同一事务中运行,因此一致性会自动得到保证。如果你有(不严格的)严格要求不使用PostgreSQL作为数据库,而是滥用它作为一个关键值存储,那么只考虑替代方案。我最初没有考虑触发器的原因是由于可能的性能问题。但我现在会重新考虑使用它。谢谢