Postgresql的to_tsvector()函数的Rails activeRecord版本
我的数据库中有一个TSVECTOR列,我想通过Rails回调而不是触发器来更新该列。我想知道是否有一个ActiveRecord代码来实现这一点。到目前为止,我是通过手动执行原始SQL来实现这一点的,但它看起来并不好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}") 我想
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作为数据库,而是滥用它作为一个关键值存储,那么只考虑替代方案。我最初没有考虑触发器的原因是由于可能的性能问题。但我现在会重新考虑使用它。谢谢