Webサイトの検索にapachesolrを使用しています。ネストされたエンティティを使用して、さまざまなテーブルからデータをインポートしています。データインポートは成功し、すべてのドキュメントがインデックスに追加されています。私のdataConfigは次のようになります:
<dataConfig>
<dataSource type="JdbcDataSource" driver ="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/purplle_purplle2" user="purplle_purplle" password="purplle123" />
<document name="doc">
<entity name="offer" query="SELECT * FROM service_offering WHERE module LIKE 'location' ">
<field column="name" name="name"/>
<field column="id" name="id" />
<field column="type_id" name="type_id" />
<entity name="offer_type" query=" select name from service_offeringtype where id='${offer.type_id}'" >
<field column="name" name="offer_type" />
</entity>
<entity name="offer_location" query=" select name from service_location where id='${offer.module_id}'" >
<field column="name" name="location_name" />
</entity>
<entity name="offer_address" query=" select * from service_address where module_id='${offer.module_id}' AND module LIKE 'location'" >
<entity name="loc_city" query=" select name from loc_city where id='${offer_address.city}'" >
<field column="name" name="loc_city" />
</entity>
<entity name="loc_area" query=" select name from loc_area where id='${offer_address.area}'" >
<field column="name" name="loc_area" />
</entity>
<entity name="loc_zone" query=" select name from loc_zone where id='${offer_address.zone}'" >
<field column="name" name="loc_zone" />
</entity>
</entity>
</entity>
</document>
</dataConfig>
ここで、このインデックスを直接検索するとします。結果は「名前」フィールドに対してのみフェッチされます。他のフィールド、つまり「loc_area」、「location_name」、「loc_city」などにはnullを返します。私のスキーマは次のようになります。
<field name="id" type="int" indexed="true" stored="true" />
<field name="name" type="string" indexed="true" stored="true" />
<field name="offer_type" type="string" indexed="true" stored="true" />
<field name="location_name" type="string" indexed="true" stored="true" />
<field name="type_id" type="string" indexed="true" stored="true" />
<field name="loc_city" type="string" indexed="true" stored="true" />
<field name="loc_area" type="string" indexed="true" stored="true" />
<field name="loc_zone" type="string" indexed="true" stored="true" />
ただし、これらのフィールドを「テキスト」フィールドにコピーすると、デフォルトでschema.xmlに存在します。次に、「テキスト」フィールドを検索することで、関連する結果を簡単に取得できます。
<copyField source="name" dest="text"/>
<copyField source="offer_type" dest="text"/>
<copyField source="location_name" dest="text"/>
<copyField source="loc_city" dest="text"/>
<copyField source="loc_area" dest="text"/>
<copyField source="loc_zone" dest="text"/>
しかし、スコアを計算するためにさまざまなフィールドにブーストレベルを割り当てる必要があるため、このように行うことはできません。これをクエリ構文"&defType = edismax&qf = name ^ 1.0 + location_name ^ 10.0 + loc_area ^ 50.0"に追加すると、nullの結果が返されます。
なにが問題ですか?