サイト内で検索機能を作成しようとしていますが、ユーザーが複数の単語を検索して、さまざまなモデルに存在する条件に一致する部分文字列を検索できるようにします。複数の単語を複数のモデルで検索する
この例のために、のは、私は次のモデルを持っているとしましょう:
- 従業員
- 会社
- 市
- 郡
郡は、複数の自治体があり、複数の従業員を持つ複数の企業があります。
Employee.firstname、Employee.lastname、Company.name、Municipality.name、およびCounty.nameの組み合わせに対して検索を検索できるようにするため、最終結果をEmployeeインスタンスにします。
たとえば、 "joe tulsa"という文字列を検索すると、前の文で指定したプロパティのどこかに両方の単語があるすべての従業員が返されます。私はいくつかの誤認を得るだろうが、少なくとも私はTulsa郡の "Joe"という名前のすべての従業員を取得する必要があります。
私はいくつかのアプローチを試しましたが、私は正しい道を辿るとは確信していません。私はこれを行うための素敵なRoR-ishの方法を探しています。そして、より多くのRoRの知恵を持った人が、適切なソリューションの概要を助けることを望んでいます。
を、私は、検索のこの種の非常に経験ないんだけど、RoRの外に、私は手動でwhere句を作成し、一緒にすべてのテーブルを結合するSQL文を作成したい:私は試してみました何
別々の検索語ごとに、異なる表をカバーする。おそらくビルダーを使用します。次に、クエリを実行して結果をループし、Employeeオブジェクトを手動でインスタンス化し、配列に追加します。 RoRの中でこの問題を解決するには
、私がしてきた:
1)私のプロジェクトでは従業員モデルに対応するが、私はテーブルの2以上に参加するために必要なときに私が捕まってしまった何で名前のスコープに手を染め"ステップ"離れて(市町村と郡)。
2)クエリを簡略化するために、すべてのテーブルを結合するビュー(「search_view」と呼ばれる)を作成しました。そして、私はこのテーブルでEmployee.find_by_sql()を使用すると思っていました。私はSQLを作成するビルダーを使用したいと思ったし、ARELが使用するものだったことを思えたので、私は何かやってみました:
view = Arel::Table.new(:search_view)
をしかし、結果としてアリエル::表は、すべての列が含まれていませんので、私のクエリを構築することはできません。現時点では、私は動作しているクエリビルダを取得する方法がわからないため、ちょっと立ち往生しています。
適切な宝石を使ってSphinxやSolrなどのカスタム検索エンジンを試しましたか? – Bohdan
いいえ、私はそれらを試していません。私たちはテーブルの中で何千ものレコードトップを話しています。だから私はそれが過度のものかもしれないと思っていました。あなたはそれが行く方法だと思いますか? – rogerkk
真実を伝えるために私はそれを一度も使っていない(多分誰かが賛否両論の回答を投稿したり、http://stackoverflow.com/questions/737275/pros-cons-of-full-text-search-engineをチェックするだろう-lucene-sphinx-postgresql-full-text-searc)しかし、もし私が同様の仕事を解決しなければならないなら、私は間違いなく1つを使うでしょう。 – Bohdan