Ruby on rails 如何在Postgres数据库中存储正则表达式或搜索词,并在Rails查询中进行计算?
我在Rails应用程序中遇到DB查询问题。我想存储各种搜索词(比如100个),然后根据一个值进行动态计算。我能找到的Postgres中所有类似于或~(regex)的示例都在查询中使用固定字符串,而我想从一行中查找查询 例如:Ruby on rails 如何在Postgres数据库中存储正则表达式或搜索词,并在Rails查询中进行计算?,ruby-on-rails,ruby,regex,postgresql,ruby-on-rails-4,Ruby On Rails,Ruby,Regex,Postgresql,Ruby On Rails 4,我在Rails应用程序中遇到DB查询问题。我想存储各种搜索词(比如100个),然后根据一个值进行动态计算。我能找到的Postgres中所有类似于或~(regex)的示例都在查询中使用固定字符串,而我想从一行中查找查询 例如: Table: Post column term varchar(256) (plus regular id, Rails stuff etc) input = "Foo bar" Post.where("term ~* ?", input) 所以term是VARCHA
Table: Post
column term varchar(256)
(plus regular id, Rails stuff etc)
input = "Foo bar"
Post.where("term ~* ?", input)
所以term是VARCHAR列名,包含至少一行的数据,其值为:
^foo*$
除非我输入一个精确的匹配项(例如术语中的“Foo-bar”),否则这永远不会返回结果
我还想理想地使用以下表达式
(^foo.*$|^second.*$)
i、 e.还有多个搜索词,因此它将与“Foo-Bar”或“search-Example”匹配
我认为这与Ruby或ActiveRecord剥离某些内容有关?或者我走错了方向,不能将regex或类似的用于这样的行数据值
关于如何做到这一点的其他建议也很受欢迎。Postgres正则表达式匹配运算符的正则表达式位于右侧,字符串位于左侧。参见示例: 但是在您的查询中,您将
term
视为字符串,“Foo bar”视为正则表达式(您已经交换了它们)。这就是为什么唯一匹配的术语是精确匹配。尝试:
Post.where("? ~* term", input)
我还希望理想情况下使用类似
的表达式,如果您有一组固定的术语,请使用三元树正则表达式生成器。See查找单词所需的步骤不超过5步。