2012-02-02 8 views
3

n製品の表と、これらの製品の機能の表があります。各製品には多くの機能があります。 SolrのDataImportHandlerの構成を考える:Solrはテーブルをメモリ内で結合できますか?

<document name="products"> 
    <entity name="item" query="select id, name from item"> 
    <field column="ID" name="id" /> 
    <field column="NAME" name="name" /> 
    <entity name="feature" 
     query="select feature_name, description from feature where item_id='${item.ID}'"> 
     <field name="feature_name" column="description" /> 
     <field name="description" column="description" /> 
    </entity> 
    </entity> 
</document> 

Solrには、このデータをフェッチするためにn + 1クエリを実行します。メインクエリの場合は1、フィーチャを取得するクエリの場合はnです。これは、多数のアイテムにとっては非効率的です。これらのクエリを別々に実行して代わりにメモリに結合するようにSolrを構成することは可能ですか?両方のテーブルのすべての行がフェッチされます。

答えて

3

これはCachedSqlEntityProcessorを使用して行うことができる。

<document name="products"> 
    <entity name="item" query="select id, name from item"> 
    <field column="ID" name="id" /> 
    <field column="NAME" name="name" /> 
    <entity name="feature" 
     query="select item_id, feature_name, description from feature" 
     cacheKey="item_id" 
     cacheLookup="item.ID" 
     processor="CachedSqlEntityProcessor"> 
     <field name="feature_name" column="description" /> 
     <field name="description" column="description" /> 
    </entity> 
    </entity> 
</document> 

Solrのインデックスはfeature_namedescriptionは、どのような方法で接続されていない、「平坦」であるからです。各productには、これらのそれぞれに複数の値のフィールドがあります。

1

Solrがこれを実行できるかどうかはわかりませんが、データベースは可能です。 MySQLを使用していると仮定して、これを単一のクエリに変換するには、JOINGROUP_CONCATを使用します。

SELECT id, name, GROUP_CONCAT(description) AS desc FROM item INNER JOIN feature ON (feature.item_id = item.id) GROUP BY id

複数の値を分離するdescRegexTransformerを使用することを忘れないでください:クエリは次のようになります。

+0

私は既にこの手法を(タグのような)単一値サブエンティティに使用していますが、複数のフィールドを持つサブエンティティに対してこれをどのようにしますか? *これを反映するために質問を更新しました。* – beerbajay

+1

GROUP_CONCAT()は、指定されたIDの説明のすべての値を取り、結果の単一の列に戻します。説明の個々の値はコンマで区切られます。その後、RegexTransformerを使用して、インデックスを作成する前にコンマで区切ることができます。 – nikhil500

+0

あなたは私が何を意味するのか誤解しました。サブエンティティに**フィールドが2つある場合はどうなりますか?各製品には多くの機能があり、各機能は名前*と*説明の両方で構成されていますか? – beerbajay

関連する問題