2

新しいプロジェクトとして、e コマース サイトのシステムを構築しています。アイデアは、サプライヤーから製品をインポートし、それらをカタログに直接挿入する代わりに、すべての情報をステージング エリアに保存することです。各サプライヤーには独自のステージ (つまり、データベース内のテーブル) があり、複数のステージング領域を 1 つのエンティティ (現在は 1 つのテーブルですが、後でおそらく Sphinx または Solr に) にフラット化します。次に、マーチャンダイザーは、ステージング製品の関連フィールド (名前と説明) を検索し、一致する製品のリストを表示して、それらの製品をライブ カタログにプッシュすることを選択できます。検索では、単一のテーブル (フラット化されたステージング領域) に対してクエリが実行されます。

私のデザインでは、名前、説明、supplier_id、supplier_prod_id など、単一のフラット化されたテーブルに検索可能およびフィルター可能なフィールドのみを格納するように呼び出します。検索クエリは、一致するアイテムの ID と、使用されるクラス (supplier_id) のみを返します。製品がどのステージングエリアからのものかを識別します。

別のシニア エンジニアは、平坦化された検索テーブルに他のメタ フィールド (検索対象外) を含める必要があると考えていますが、製品をステージからライブ カタログに「プッシュ」するときに使用できます。彼はまた、クエリがこの他のすべての情報を返す必要があると感じています。

フラット化されたテーブルに検索可能なフィールドのみを持ち、検索でクラス/ID のペアのみが返されるようにすることについて、私はかなり強く感じています。 、3))。

私の推論の一部は、これにより、後でフラット化されたテーブルをデータベースから sphinx や solr などの検索サーバーに切り替えることが容易になり、検索の実装が変更されたという理由だけで残りのコードを変更する必要がなくなるというものです。

私は正しい道を進んでいますか?検索可能なフィールドのみを保持し、ID のみを返すことが重要である理由を他のエンジニアに納得させるにはどうすればよいですか? もっと具体的に言えば、なぜ検索アプリケーションはオブジェクトの ID だけを返さなければならないのでしょうか?

4

5 に答える 5

2

それぞれのツールが最も効果を発揮するように使用する必要があります。Solr や Sphinx などの全文検索エンジンは、テキスト フィールドの検索とヒットの迅速なランク付けに優れています。選択のような方法で保存されたデータを取得する場合、特別な利点はありません。データベースはそのために最適化されています。そうです、あなたは正しい道を進んでいます。検索エンジン内に何を格納するかを決定する際のその他の問題については、検索エンジンと DBMSを参照してください。

于 2009-10-01T06:18:53.227 に答える
2

あなたは正しい道を進んでいると思います。これらの他のフィールドが、ステージングされたアイテムを一意に識別するか、ユーザーがステージングされたアイテムをフィルタリングできるようにするための値を提供しない場合、アイテムがライブ環境にプッシュされるまで、データは基本的に役に立ちません。他のエンジニアが、追加のメタデータがユーザーがより多くの情報に基づいた決定を下すのに役立つと感じている場合は、それらの追加のフィールドを検索可能にすることもできます (それにより、テーブルの指定された目的を満たします)。

他の検索不可能なデータをプリフェッチする唯一の理由は、ライブ環境へのプッシュのパフォーマンスを向上させるためです。

于 2009-09-29T21:41:32.700 に答える
0

Solr は強力なインデックスと見なすことができます。したがって、インデックスが ID を返すので、solr が同じことを行うのは論理的です。

solr クエリ パラメータflを使用して、識別子のみの結果を求めることができますfl=id

ただし、一部のデータを返すために solr が必要な機能もあります。一致したドキュメント内の検索用語の強調表示です。必要ない場合は、solr を使用して識別子のみを取得しても問題ありません (ドキュメント リストのみが必要で、ファセット、関連ドキュメント、スペル チェックなどの他の機能は必要ないと思います)。

そうは言っても、一意に solr を使用して ID を取得する DB から、または solr の返されたフィールド (それらが保存されている場合) から、あるいは両方の組み合わせから、検索関数でオブジェクトを構築する方法が重要になるはずです。「強調表示された」コンテンツフィールドと DB を取得するために solr を考えてください。繰り返しますが、強調表示が必要ない場合、これは問題ではありません。

于 2009-10-06T15:21:40.420 に答える
0

私は何千ものドキュメントでSolrを使用していますが、次の理由でIDのみを返します:

Solr の場合:-同期ミスが追加された場合、それは大したことではありません(特にあなたの場合、異なる価格を表示することは大きな問題になる可能性があります...アイテムが正しい場所にないようなものですが、データは正しいです) - Solr にドキュメントの「説明」を返すように要求しない場合 (つまり、多くの行のテキスト)、多くの時間を節約できます。

DBの 場合:-結果をキャッシュできるため、IDを使用するとさらに高速になります(毎回Solrからのすべてのデータは必要ありません!!!)-同じ方法で結果を構築します( Solr から html をビルドする場合は特定のメソッドを、DB からは別のメソッドを使用します)。

他にもたくさんあると思います...

于 2009-10-13T10:47:52.873 に答える
0

sphinx の場合、ドキュメント ID と指定された属性のみが返されます (ほとんどの場合、属性は数値データです)。JOIN必要に応じて、他のメタデータはフラット化されたテーブルから離れているだけなので、正しい考えを持っていると思います。

于 2009-09-30T12:40:31.440 に答える