0

MySQL バックエンドを使用して Solr のいくつかのテーブルをフラット化しようとする際に、誰かが私を助けてくれることを願っています。

ERD は次のとおりです。製品の ERD

コンテンツ テーブルにリンクされた製品テーブルと、コンテンツをオーバーライドするための market_content テーブルがあります。テキストコンテンツという意味でのコンテンツ。製品テーブルは「content.id」への外部キーによってコンテンツ テーブルを参照し、「content.default_content」フィールドは「content.id」に関連するコンテンツを示します。コンテンツは、テーブル market_content によってオーバーライドできます。「content.id」のレコードと一致する「market_content.id」フィールドに対応する ID がある場合、「content.default_content」を使用する代わりに、「market_content.content」フィールドからコンテンツを取得する必要があります。

「content.default_content」または「market_content.content」のいずれかのコンテンツは、「シャンプー」、「コンディショナー付きシャンプー」などのテキストです。

Solr から結果を返す際に構造を以下のようにしようとして問題が発生しています。また、コンテンツ テーブルの id に対応する market_content テーブルに id がある場合、Solr がオーバーライドするコンテンツを返すことを確認しています。 market_content テーブルの「market.content.content」フィールド。

私が望むのは、結果が次のように構造化されることです。

ProductId:1 
Market: 
GB: 
Content_id_description: shampoo 
US:  
Content_id_description: shampoo 
EU: 
Content_id_description: Shampoo with conditioner



ProductId:2 
Market: 
GB: 
Content_id_description: shampoo 
US: 
Content_id_description: shampoo 
EU: 
Content_id_description: shampoo 

製品1; 市場; EU; Content_id_description (コンテンツ テーブルからのコンテンツ): 「コンディショナー付きシャンプー」と言うようにオーバーライドされました。

この構造で Solr を出力する方法はありますか?Solr で最適化された検索を取得するには、上記の ERD をフラット化するにはどうすればよいですか?

ありがとう

4

2 に答える 2

0

私の謙虚な意見では、コンテンツに 2 つのテーブルは必要ありません。次のリンクのように ERD を簡略化できます。これにより、デフォルト コードを持つデフォルト マーケットを作成できます。これは、マーケット関連の説明がない製品に使用できます。

例えば

     product 
     id                code
     ---               -----
     1                 a13d4
     2                 b453d


     market
     id                code
     ---               -----
     0                 default
     1                 EU
     2                 GB
     3                 USA


     market_product_details
     product_id        market_id              description
     ----------        ---------              -----------
     1                 0                      Shampoo
     1                 1                      Shampoo
     1                 2                      Shampoo
     1                 3                      Shampoo with Conditioner
     2                 0                      Perfume

したがって、market_id 0 の上は製品のデフォルト名です。

クエリに関しては、テーブル構造が単純化されているため、次のような solr のクエリを実行できます。
select mp.product_id, mp.market_id, ma.code, mp.description from market_product_details mp, market ma where mp.market_id=ma.market

于 2013-10-21T10:10:49.973 に答える
0

最終的に、リレーションシップや正規化を行わないフラットなテーブル構造を模倣した別のテーブルを作成し、正規化されたテーブルに挿入するたびにイベントをトリガーして、このフラットなテーブル構造のテーブルにデータを入力することにしました。次に、このフラットなテーブル構造を検索に使用するように Solr を構成しました。

于 2014-05-02T08:40:52.493 に答える