ruby-on-rails - 如何在 Postgres 数据库中存储正则表达式或搜索词并在 Rails Query 中进行评估?

标签 ruby-on-rails ruby regex postgresql ruby-on-rails-4

我在 Rails 应用程序中进行数据库查询时遇到问题。我想存储各种搜索词(比如 100 个),然后动态评估一个值。我可以找到Postgres中SIMILAR TO或~(正则表达式)的所有示例在查询中使用固定字符串,而我想从一行中查找查询。

示例:

Table: Post 
column term varchar(256)
(plus regular id, Rails stuff etc)

input = "Foo bar"
Post.where("term ~* ?", input)

所以术语是 VARCHAR 列名,包含至少一行的数据,其值:

^foo*$

除非我输入完全匹配的内容(例如术语“Foo bar”),否则永远不会返回结果。

我也想理想地使用像

这样的表达式
(^foo.*$|^second.*$) 

即也有多个搜索词,因此它将与“Foo Bar”或“搜索示例”匹配。

我认为这与 Ruby 或 ActiveRecord 剥离某些内容有关?或者我走错了路,不能使用正则表达式或 SIMILAR TO 来处理这样的行数据值?

有关如何执行此操作的替代建议也表示赞赏。

最佳答案

Postgres 正则表达式匹配运算符的正则表达式位于右侧,字符串位于左侧。请参阅示例:https://www.postgresql.org/docs/9.3/static/functions-matching.html#FUNCTIONS-POSIX-TABLE

但是在您的查询中,您将 term 视为字符串,将“Foo bar”视为正则表达式(您已交换了它们)。这就是为什么唯一匹配的术语是完全匹配。尝试:

Post.where("? ~* term", input)

关于ruby-on-rails - 如何在 Postgres 数据库中存储正则表达式或搜索词并在 Rails Query 中进行评估?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44863946/

相关文章:

ruby - 复制 Ruby 类有什么用吗? (我正在做粗俗的 mock 。)

ruby - Roo 弃用的 roo 方法

java - 使用正则表达式拆分字符串并在两侧获取数据

python - 在 python 中使用负前瞻正则表达式替换丢失的 ')' 时出错

ruby-on-rails - Rails 3 能够从 Microsoft Access 导入/导出吗?

ruby-on-rails - 在 Ruby 中,我可以将数组的每个元素单独传递给接受 *args 的方法吗?

ruby-on-rails - 为什么 Ruby 版本更新需要安装 bundler?

ruby - 文档如何

javascript - 如何从 Javascript 中的较大字符串中获取字符串?

ruby-on-rails - 无法启动 Puma Ubuntu 16.04