5

コンテンツのページを管理するホストされたアプリケーションがあります。各ページには、多数のカスタマイズされたフィールドといくつかの標準フィールド (タイムスタンプ、ユーザー名、ユーザーの電子メールなど) を含めることができます。

何百もの異なるサイトがシステムを使用している可能性があるため、フィルタリング/検索を処理する効率的な方法は何ですか? 絞り込みたいグリッド ビューを想像してください。特定のフィールド (ユーザー ID、日付) でフィルタリングするか、全文検索を入力できます。

たとえば、「ユーザー ID 10 で開始されたすべてのページ」は、MySQL データベースに対する非常に迅速なクエリです。しかし、「userid が 10 で [一部の検索クエリ] に一致するユーザーによって開始されたすべてのページ」のようなものは、データベースに悪影響を与えるため、Lucene のような検索エンジンに適しています。

基本的に、他の大規模サイトがこの種のことをどのように行っているのか疑問に思っています. すべての種類のフィルタリングに検索エンジンを 100% 利用していますか? データベースクエリと検索エンジンを混在させていますか?

検索エンジンのみを使用すると、新しい/更新されたオブジェクトが検索インデックスに表示されるまでにかかる遅延時間に問題があります。つまり、インデックスをすぐに更新するのは賢明ではなく、代わりにバッチで行うのは賢明ではないことを読みました。これが 5 分ごとを意味する場合でも、単純なページ リスト (「カテゴリ:5」の検索クエリなど) を表示したときに、最近追加されたページがすぐに表示されないと、ユーザーは混乱します。

私たちは MySQL を使用しており、検索用に Lucene を詳しく調べています。私が知らない他の技術はありますか?

私の考えは、MySQL を使用して基本的なフィールドをフィルタリングする単純なフィルタリング ページを提供することです。次に、Google と同様の結果を表示する別の全文検索ページを提供します。これが唯一の方法ですか?

4

3 に答える 3

2

Solrまたはgrassyknollはどちらも、Luceneに対してわずかに抽象的なインターフェースを提供します。

それは言った:はい。あなたが主にコンテンツ主導のサイトであり、データの全文検索を提供している場合、LIKE以外にも何かがあります。MySqlのFULLTEXTインデックスは完全ではありませんが、暫定的には許容できるプレースホルダーになる可能性があります。

Luceneインデックスを作成すると仮定すると、Luceneドキュメントをリレーショナルオブジェクトにリンクするのは非常に簡単です。インデックス時に保存されたプロパティをドキュメントに追加するだけです(このプロパティはURL、ID、GUIDなどになります)。その後、検索は2になります。フェーズシステム:1)Luceneインデックスにクエリを発行します(タイトルなどの単純な結果を表示します)2)キーによってリレーショナルストアからオブジェクトに関するより詳細な情報を取得します

Luceneではドキュメントのインスタンス化に比較的コストがかかるため、リレーショナルオブジェクトの完全なクローンではなく、Luceneインデックスで検索されたフィールドのみを格納する必要があります。

于 2008-11-19T19:46:35.153 に答える
0

MySQLまたはPostgreSQLを使用したい場合、それとうまく機能するオープンソースソリューションはSphinxです: http ://www.sphinxsearch.com/

私たちは同じ問題を抱えており、可能な解決策としてSphinxとLuceneを検討しています。

于 2009-06-11T20:52:21.823 に答える
0

すぐに MySQL を帳消しにしないでください。

データベースを使用して実装します。たとえば、where句に「like」を含む選択などです。

プロファイリングし、必要に応じてインデックスを追加します。ベータ版を展開して、ユーザーの実際のデータ パターンから実際の数値を取得します。すべての列が同じように求められるわけではありません。

パフォーマンスが悪い場合は、他のオプションを検討してください。SQL、データベース、データベースが実行されているマシンを調整し、最終的に別のテクノロジ スタックを使用することを検討できます...

于 2008-11-19T18:30:16.193 に答える