0

postgresデータベースの検索にthinkingsphinxを使用するRubyonRailsサイトがあります。

私が検索しているテーブルのフィールドの1つは、ブール値です。検索クエリで特定のキーワードが使用されている場合に、そのブール値に一致できるようにしたいと思います。

例を挙げて完全に説明すると、
私のサイトは独自の白黒フィルムを開発する人々のためのものです。
私は人々が彼らがどのように映画を開発するかを説明するレシピテーブルを持っています。そのテーブルには、「stand_developed」(フィルムを現像する方法)と呼ばれるブール列があります。
ユーザーが「stand」という単語を検索したときに、そのフィールドがtrueである結果を返したいのですが。

私はスフィンクスのドキュメントを調べましたが、可能かどうかはわかりません。

クエリ用語を解析して条件を追加することで、コントローラーメソッド内で何かをハックできると思いますが、よりクリーンな方法はありますか?

4

3 に答える 3

1

これは、ThinkingSphinxを使用してブールフィールドを検索する限り私が行ったことです。stand_developed次の方法で、query_stringとともにURLパラメータとして渡します。

  1. 検索せずに一般的なクエリのURLは次のようにstand_developedなりますhttp://yoursite.com/search?q=your_query_string
  2. クエリのURLstand_developed == TRUEhttp://yoursite.com/search?q=your_query_string&stand_developed=1
  3. クエリのURLstand_developed == FALSEhttp://yoursite.com/search?q=your_query_string&stand_developed=0

次に、コントローラーで次のようにします。

if params[:stand_developed]  && params[:stand_developed].to_i == 1
  # perform query search with stand_developed == true
  @search_results = YourModel.search(params[:q], :with => {:stand_developed => true})
elsif params[:stand_developed]  && params[:stand_developed].to_i == 0
  # perform query search with stand_developed == false
  @search_results = YourModel.search(params[:q], :with => {:stand_developed => false})
else
  # perform general query search
  @search_results = YourModel.search(params[:q])
end
于 2010-01-31T05:38:16.467 に答える
1

params [:search]にテキスト「stand」が含まれているかどうかをテストし、そこから検索を実行することもできます。テーブルに余分な列は必要ありません。それは必要のないオーバーヘッドです。

if params[:search].downcase.include?('stand')
  Model.search params[:search], :with => {:stand_developed => true}
else
  Model.search params[:search]
end
于 2010-10-27T03:52:30.720 に答える
0

私は今これに対する解決策を考え出しました。

質問で言及した「ハック」を試しました。「スタンド」という単語を解析して明示的に検索しましたが(Paul Davisの回答のバリエーション)、うまく機能しませんでした。

私は私の質問でこれを説明しませんでした(私が尋ねたときに完全な意味を理解していませんでした)が、ユーザーがレシピの説明で「スタンド」という単語を使用した場合も一致する必要があります。

そこで、「stand_developedがtrueであるか、notesに「stand」が含まれている場合」の行に沿って条件を追加するようにスフィンクスを取得しようとしましたが、そのための正しい構文が見つからなかったようです。また、他の検索テキストも処理する必要がありました。

最後に、レシピテーブルに「search_tags」という列を追加し、ユーザーがレシピを追加するときに「stand_developed」を選択した場合は、「stand」という単語を追加します。次に、Sphinxにそのフィールドと他のフィールドのインデックスを作成させますが、すべて完全に機能します。

于 2010-02-05T09:43:30.250 に答える