首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Ruby、Sinatra和Postgres搜索表

如何使用Ruby、Sinatra和Postgres搜索表
EN

Stack Overflow用户
提问于 2014-01-03 14:14:24
回答 2查看 282关注 0票数 0

如何使用Ruby、Sinatra和Postgres进行单词搜索?

我的桌子看起来是这样的:

代码语言:javascript
复制
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中你会这样做:

代码语言:javascript
复制
  Post.where(["body LIKE :tag", {:tag => word}])

但我不知道如何使用Sinatra和Postgres来做同样的事情。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-03 14:24:49

看一看寻找postgres。http://www.sai.msu.su/~megera/postgres/gist/tsearch/V2/

这是一个非常简单的搜索。很多选项都是可用的,例如,在标题中加权匹配比在正文中加权匹配更多。

您将向表中添加一个向量列:

代码语言:javascript
复制
 ALTER TABLE posts ADD COLUMN vector tsvector;

然后

代码语言:javascript
复制
 UPDATE posts SET vector=('default',coalesce(title,'') ||' '|| coalesce(body,''));
 VACUUM FULL ANALYZE;

然后您可以查询:

代码语言:javascript
复制
 SELECT * FROM posts WHERE vector @@ to_tsquery('default', 'Test | Zeppelin');
票数 2
EN

Stack Overflow用户

发布于 2014-01-03 15:17:14

但是,无法找到能够完成此工作的方法,但是,使用ActiveRecord Gem运行原始SQL确实成功了:

代码语言:javascript
复制
Post.find_by_sql("SELECT * FROM posts WHERE title LIKE '%word%' OR body LIKE '%word%';")

希望它能帮到某人..。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20905602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档