2014-05-12 49 views
0

我想在我的數據導入處理程序配置中使用緩存中的一些實體。不知何故,如果我使用緩存,我只能獲得多值字段的第一個值。我的配置如下所示:Solr DataImportHandler緩存支持多個值

<entity name="product" query="SELECT product_id FROM Product WHERE 1"> 
    <entity name="strength" query="SELECT * 
     FROM Strength WHERE product_id = '${product.product_id}'"> 
     <entity name="form" query="SELECT CONCAT(parent_route,'|',form_name) AS form_name, LOWER(CONCAT_WS('\n',form_name,parent_route)) AS form_name_s, 
       CAST(form_id AS CHAR(10)) AS form_id_string FROM Form WHERE form_id = '${strength.form_id}'" 
       transformer="RegexTransformer" 
       cacheImpl="SortedMapBackedCache" cacheLookup="strength.form_id" cacheKey="form_id_string"> 
        <field column="form_name" name="form_name" /> 
        <field column="form_name_s" splitBy="\n" /> 
     </entity> 
    </entity> 
</entity> 

應該爲實體「form」返回兩行,但只有第一個行在啓用緩存時纔可見。 Solr沒有能力緩存多行或者我做錯了什麼?我的Solr版本是4.1。

回答

0

當緩存的查詢的where部分被刪除時問題得到解決。我不確定下面的配置是否理想,但我瞭解的目標是減少查詢次數。

<entity name="product" query="SELECT product_id FROM Product WHERE 1"> 
    <entity name="strength" query="SELECT * 
     FROM Strength WHERE product_id = '${product.product_id}'"> 
     <entity name="form" query="SELECT CONCAT(parent_route,'|',form_name) AS form_name, LOWER(CONCAT_WS('\n',form_name,parent_route)) AS form_name_s, 
       CAST(form_id AS CHAR(10)) AS form_id_string FROM Form" 
       transformer="RegexTransformer" 
       cacheImpl="SortedMapBackedCache" cacheLookup="strength.form_id" cacheKey="form_id_string"> 
        <field column="form_name" name="form_name" /> 
        <field column="form_name_s" splitBy="\n" /> 
     </entity> 
    </entity> 
</entity>