如何使用Ruby、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.datetime "updated_at", :null => false
end我正在寻找标题和身体字段中的关键词。
使用ActiveRecord文档,我尝试了Post.find_by(body: "a"),但是得到了一个空的结果,其中我的身体包含char a
我知道在Rails中你会这样做:
Post.where(["body LIKE :tag", {:tag => word}])但我不知道如何使用Sinatra和Postgres来做同样的事情。
发布于 2014-01-03 14:24:49
看一看寻找postgres。http://www.sai.msu.su/~megera/postgres/gist/tsearch/V2/
这是一个非常简单的搜索。很多选项都是可用的,例如,在标题中加权匹配比在正文中加权匹配更多。
您将向表中添加一个向量列:
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');发布于 2014-01-03 15:17:14
但是,无法找到能够完成此工作的方法,但是,使用ActiveRecord Gem运行原始SQL确实成功了:
Post.find_by_sql("SELECT * FROM posts WHERE title LIKE '%word%' OR body LIKE '%word%';")希望它能帮到某人..。
https://stackoverflow.com/questions/20905602
复制相似问题