gpt4 book ai didi

ruby-on-rails - 如何将部分字符串与数据库对象的属性相匹配?正则表达式?

转载 作者:太空狗 更新时间:2023-10-30 01:44:15 27 4
gpt4 key购买 nike

我有一个包含电影列表的数据库。典型的条目如下所示:

id: 1, 
title: "Manhatten and the Murderer",
year: 1928,
synopsis: 'some text...'
rating: 67,
genre_id, etc. etc.

现在我正在尝试使一系列搜索测试通过,到目前为止我已经通过了一个测试用例,如果您在文本字段中键入标题“Manhatten and the Murderer”,它将找到您想要的电影想。问题在于部分匹配。

现在我想要一种方法来搜索“Manhat”并匹配记录“Manhatten and the Murderer”。我还希望它与任何包含“Manhat”的电影相匹配。例如,它可能会返回其他 2 或 3 个标题:“我在曼哈顿的生活”、标题:“曼哈顿的大苹果”等。

下面是我目前在电影模型中的代码:

def self.search(query)
# Replace this with the appropriate ActiveRecord calls...

if query =~ where(title:)
#where(title: query)
binding.pry
end


end

我的问题是,我该如何设置?我的问题是“where(title:)”行。一个想法是使用 Regexp 来匹配 title 属性。任何帮助将不胜感激!谢谢。

最佳答案

使用查询来搜索介于两者之间的子字符串:

name = "Manhattan"
Movie.where("title like ?", "%#{name}%")

例如:

  • %Manhattan 会给你:Love in Manhattan
  • Manhattan% 将获得:Manhattan and Company
  • %Manhattan% 会让你们:[Love in Manhattan, Manhattan and Company]

但是,如果您要搜索电影简介,则应该使用 Thinking SphinxElastic Search

例如,使用 Elastic Search,您可以像这样设置概要:

添加app/indices/movie_index.rb:

ThinkingSphinx::Index.define :movie, :with => :active_record do
# fields
indexes title, :sortable => true
indexes synopsis
end

使用 rake ts:index 索引您的数据

然后使用以下命令运行 Sphynx:rake ts:start

你可以这样搜索:

Movie.search :conditions => {:synopsis => "曼哈顿"}


Elastic Search 是 ThinkingSphinx 的绝佳替代品,甚至还有 RailsCast关于它,所以您绝对应该看看什么最适合您……希望这对您有所帮助!

关于ruby-on-rails - 如何将部分字符串与数据库对象的属性相匹配?正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22596861/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com