Sql 如何使用Ruby Gem ActiveRecord、Sinatra和Postgres搜索表
如何使用Ruby Gem ActiveRecord、Sinatra和Postgres进行单词搜索 我的桌子看起来是这样的:Sql 如何使用Ruby Gem ActiveRecord、Sinatra和Postgres搜索表,sql,ruby,postgresql,activerecord,sinatra,Sql,Ruby,Postgresql,Activerecord,Sinatra,如何使用Ruby Gem ActiveRecord、Sinatra和Postgres进行单词搜索 我的桌子看起来是这样的: create_table "posts", :force => true do |t| t.string "title" t.text "body" t.string "image_url" t.integer "user_id" t.datetime "created_at", :null => false t.dat
create_table "posts", :force => true do |t|
t.string "title"
t.text "body"
t.string "image_url"
t.integer "user_id"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
我试图在标题和正文字段中搜索关键词
使用我尝试过的Post.find_by(body:“a”)
,但得到了一个空结果,其中我的body确实包含chara
我知道在Rails中,您会这样做:
Post.where(["body LIKE :tag", {:tag => word}])
但我不知道如何使用Sinatra和Postgres实现同样的效果。看看tsearch for Postgres 这是一个非常简单的搜索。有很多选项可供选择,例如,标题中的匹配权重大于正文中的匹配权重 您将向表中添加一个向量列:
ALTER TABLE posts ADD COLUMN vector tsvector;
然后
UPDATE posts SET vector=('default',coalesce(title,'') ||' '|| coalesce(body,''));
VACUUM FULL ANALYZE;
然后您可以查询:
SELECT * FROM posts WHERE vector @@ to_tsquery('default', 'Test | Zeppelin');
无法找到执行此任务的方法,但是,使用ActiveRecord Gem运行原始SQL确实解决了问题:
Post.find_by_sql("SELECT * FROM posts WHERE title LIKE '%word%' OR body LIKE '%word%';")
希望它能帮助某些人…到目前为止,您的尝试采取了什么形式?请张贴代码,即使它是不完整的,并显示您被卡住的地方。“这让我更好地了解如何最好地帮助你。”尼尔·斯莱特我更新了我的问题。希望它能显示我所做的尝试。谢谢约翰。展望未来,但我试图避免在我的应用程序中添加更多的gem。它实际上不是gem,而是postgres的扩展。可能有gem包装器,但我只是在安装扩展后使用了上面的原生SQL。tsearch有很多选择,它非常强大。谢谢。我会调查的