我正在构建一个用户可以发布的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%")
这当然不会奏效,但我希望你明白这个想法。任何和所有输入将不胜感激。
答案 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
等等。请参阅链接中的信息。