我在 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/