2011-09-14 19 views
5

製品とサプライヤ間に多対多の関係が存在するシナリオ用のスキーマを設計しようとしています。検索は製品中心の方法またはサプライヤ中心の方法から行うことができます。製品は多くのサプライヤによって供給され、サプライヤは多くの製品を有することになる。私が考えている解決策は次のとおりですが、フィールド定義に冗長性がたくさんあるようですが、ProductまたはSupplierの中心検索をサポートするには2つのエンティティ定義が必要です。最適に見えません。多数のエンティティ定義に対するsolrスキーマ設計

サプライヤーの検索を行う場合は、「製品」とは、製品の検索を行う場合は、「サプライヤー」は「真の多値=」

<!-- Field definitions to support supplier search --> 
<field name="s_supplier" type="string" indexed="true" stored="true" > 
<field name="s_product" type="string" indexed="true" stored="true" multiValue="true"> 

<!-- Field definition to support product search --> 
<field name="p_product" type="string" indexed="true" stored="true" > 
<field name="p_supplier" type="string" indexed="true" stored="true" multiValue="true"> 

エンティティを定義することができ、「真の多値=」定義することができますデータハンドラ内の定義は、Solr検索エンジンの美しさは、あなただけの、いずれかの製品やサプライヤーを中心に1つのスキーマ定義を選択して、ご希望の結果を達成するためのSolrの力を活用することができるということです

<entity name="products" ....> 
    <field name="p_product" column=""> 
    <entity name="suppliers"> 
     <field name="p_supplier"> 
    </entity> 
</entity> 

<entity name="suppliers" ....> 
    <field name="s_supplier" column=""> 
    <entity name="products"> 
     <field name="s_product" column=""> 
    </entity> 
</entity> 

答えて

9

です。次のは、あなたが使用して、製品中心の1で行くとしましょう:

<field name="product" type="string" indexed="true" stored="true" > 
<field name="supplier" type="string" indexed="true" stored="true" multiValue="true"> 

あなたは今だけの製品分野product:my productに対してクエリを実行して製品を検索することができ、あなたが特定のサプライヤーを検索したい場合は、 supplier:my supplierを使用するだけで、サプライヤフィールドは各製品に関連付けられた複数値フィールドであるため、そのサプライヤが関連付けられているすべての製品を元に戻すことができます。

柔軟性を高めるもう1つのオプションは、schema.xmlファイルの例で定義されているtextフィールドを活用し、'copyfield関数を使用して、サプライヤと製品の値を1つのフィールドにコピーし、サプライヤまたは製品のいずれかのフィールドでクエリ用語に一致する返されたすべてのドキュメントを取得します。

ここでは、上で定義したフィールドを使用した例を示します。あなたがtext:my termを検索する場合

<field name="text" type="text" indexed="true" stored="false" multiValued="true"/> 
<copyField source="product" dest="text" /> 
<copyField source="supplier" dest="text" /> 

そして、それは、製品やサプライヤーとフィールドが返されることと一致するインデックス内のすべての文書のいずれかになります。テキストフィールドには特定のインデックスおよびクエリ時間アナライザが適用されているため、適用されていることに注意する必要があります。

また、一意のサプライヤーのリストを作成する必要がある場合は、Solr Facetingを使用して、インデックス内のすべてのドキュメントからリストを取得するか、または現在の検索基準のみに関連付けることができます。

これらのトピックの詳細については、以下の参考文献の一部をご参照ください:精巧な答えを

+0

感謝を。私はこれらを試している、結果を投稿します。 – tech20nn

関連する問題