Dan*_*bio 9 regex database postgresql ruby-on-rails
我有一个包含电影列表的数据库.典型条目如下所示:
id: 1,
title: "Manhatten and the Murderer",
year: 1928,
synopsis: 'some text...'
rating: 67,
genre_id, etc. etc.
Run Code Online (Sandbox Code Playgroud)
现在我试图让一系列搜索测试通过,到目前为止我已经做了一个测试用例传递,如果你在文本字段中输入标题"Manhatten and the Murderer",它将找到你想要的电影.问题在于部分匹配.
现在我想要一种搜索"Manhat"并匹配记录"Manhatten and the Murderer"的方法.我也希望它与任何有"Manhat"的电影相匹配.例如,它可能会返回2或3个其他标题:"我在曼哈顿的生活",标题:"曼哈顿的大苹果"等.
下面是我在Movie模型中到目前为止的代码:
def self.search(query)
# Replace this with the appropriate ActiveRecord calls...
if query =~ where(title:)
#where(title: query)
binding.pry
end
end
Run Code Online (Sandbox Code Playgroud)
我的问题是,我该如何设置?我的问题是"where(title :)行.一个想法是使用Regexp来匹配title属性.任何帮助将不胜感激!谢谢.
rav*_*ode 34
使用搜索中间子字符串的查询:
name = "Manhattan"
Movie.where("title like ?", "%#{name}%")
Run Code Online (Sandbox Code Playgroud)
例如:
%Manhattan 会得到你: Love in ManhattanManhattan% 会得到: Manhattan and Company%Manhattan% 会得到你们两个: [Love in Manhattan, Manhattan and Company]但是,如果您正在搜索电影故事大纲,则应使用Thinking Sphinx或Elastic Search
例如,使用Elastic Search,您可以像下面这样设置概要:
添加app/indices/movie_index.rb:
ThinkingSphinx::Index.define :movie, :with => :active_record do
# fields
indexes title, :sortable => true
indexes synopsis
end
Run Code Online (Sandbox Code Playgroud)
使用索引编制数据 rake ts:index
然后运行Sphynx: rake ts:start
您可以像这样搜索:
Movie.search :conditions => {:synopsis => "Manhattan"}
Elastic Search是ThinkingSphinx的绝佳替代品,甚至还有关于它的RailsCast,所以你一定要看看真正适合你的东西......希望这会有所帮助!
您不需要正则表达式即可查找具有搜索字符串的电影。您可以这样使用SQL查询:
Movie.where('title LIKE ?','Batman%')
Run Code Online (Sandbox Code Playgroud)
那将返回所有以“蝙蝠侠”开头的电影
Movie.where('title LIKE ?','%Batman%')
Run Code Online (Sandbox Code Playgroud)
那将返回标题中任何地方都有蝙蝠侠的所有电影。我认为您已经知道'%'是查询中的小丑字符。
| 归档时间: |
|
| 查看次数: |
15341 次 |
| 最近记录: |