0

我正在构建一个 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%")

这当然行不通,但我希望你明白这一点。任何和所有输入将不胜感激。

4

2 回答 2

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_resultsuniq

于 2012-08-26T06:52:39.727 回答
1

您可以将太阳黑子宝石用于此类物品。设置完成后,您可以像这样进行搜索

# 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

和更多。请参阅链接中的信息。

于 2012-08-26T06:56:28.923 回答