用户进行的Rails查询

时间:2012-08-26 06:40:46

标签: ruby-on-rails ruby-on-rails-3

我正在构建一个用户可以发布的rails应用程序,必须像表单一样。我希望用户能够使用文本字段搜索帖子,然后将返回所有记录,其中帖子内容与用户查询类似。例如,用户输入:

'albert einstein atomic bomb'

然后,我希望运行一个查询,其中检查每个单词以及查询本身。类似的东西:

query_result = Hash.new
query_result << Post.where('content ILIKE ?', "%albert%")
query_result << Post.where('content ILIKE ?', "%einstein%")
query_result << Post.where('content ILIKE ?', "%atomic%")
query_result << Post.where('content ILIKE ?', "%bomb%")
query_result << Post.where('content ILIKE ?', "%albert einstein atomic bomb%")

这当然不会奏效,但我希望你明白这个想法。任何和所有输入将不胜感激。

2 个答案:

答案 0 :(得分:1)

这样的事情怎么样?

query = 'albert einstein atomic bomb'
sub_queries = query.split("\n") << query 

query_results = []
sub_queries.each { |q| query_results << Post.where('content ILIKE ?', "%#{q}%") }

您可能需要flatten query_results数组和uniq来删除重复项。

答案 1 :(得分:1)

你可以使用sunspot gem这样的东西。一旦设置完毕,您就可以进行类似的搜索

# Posts with the exact phrase "great pizza"
Post.search do
  fulltext '"great pizza"'
end

# One word can appear between the words in the phrase, so "great big pizza"
# also matches, in addition to "great pizza"
Post.search do
  fulltext '"great pizza"' do
    query_phrase_slop 1
  end
end

等等。请参阅链接中的信息。