0

ユーザーが投稿できるレールアプリを構築しています。フォームが必要です。ユーザーがテキスト フィールドを使用して投稿を検索できるようにすると、投稿の内容がユーザー クエリに類似しているすべてのレコードが返されます。たとえば、ユーザーは次のように入力します。

'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

あなたはこのようなもののために黒点の宝石を使うことができます。セットアップが完了すると、次のような検索を実行できます

# 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 に答える
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 に答える