私は2テーブルの顧客と手数料を持っており、関連する1xnはcustomer.id = fees.customerId
です。料金には他の2つの列、length
とrate
があります。私のSolrの設定は次のとおりです。子エンティティのフィールドの関係を維持する方法
のschema.xml
<schema name="customers" version="1.5">
<field name="_version_" type="long" indexed="true" stored="true"/>
<field name="id" type="long" indexed="true" stored="true"/>
<field name="customerName" type="string" indexed="false" stored="true"/>
<field name="length" type="int" indexed="false" stored="true" multiValued="true"/>
<field name="rate" type="float" indexed="false" stored="true" multiValued="true"/>
<uniqueKey>id</uniqueKey>
<fieldType name="long" class="solr.TrieLongField" precisionStep="0" positionIncrementGap="0"/>
<fieldType name="int" class="solr.TrieIntField" precisionStep="0" positionIncrementGap="0"/>
<fieldType name="float" class="solr.TrieFloatField" precisionStep="0" positionIncrementGap="0"/>
<fieldType name="string" class="solr.StrField"/>
</schema>
Solrのデータ-config.xmlの
<entity name="customer" query="SELECT * FROM customers">
<field column="id" name="id"/>
<field column="name" name="customerName"/>
<entity name="fees" query="SELECT length, rate FROM fees WHERE id=${customer.id}">
<field column="length" name="length"/>
<field column="rate" name="rate"/>
</entity>
</entity>
問題は、Solrのフラットスキーマ、length
とrate
エンドアップ「のが解離していることです'を2つのリストとして互いに関連付けます。私はペアの単一のリストを持っていたいので、リスト<length, rate>
。私の現在の解決策は、データ設定を
<entity name="fees" query="SELECT CONCAT(length, ';', rate) AS lengthRatePair FROM fees WHERE id=${customer.id}">
<field column="lengthRatePair" name="lengthRatePair"/>
</entity>
そして、クライアントサイドでフィールドを;で分割します。しかし、もっと洗練されたソリューションが必要だと思います。
これを行う正しい方法は何ですか?