2012-10-11 40 views
3

再次.. 我有2個表格'博客'和'評論'。博客可以包含n條評論(博客 - 1:n--評論)。到目前爲止我用下面的選擇將數據插入到Solr的指標:Solr - 具有多個值的嵌套實體

<entity name="blog" dataSource="mssqlDatasource" pk="id" 
     transformer="ClobTransformer" 
     query="SELECT b.id, b.market, b.title AS blogTitle, b.message AS    
       blogMessage, c.message AS commentMessage, c.secondColumn 
       FROM blog b LEFT JOIN comment c ON b.id = c.source_id 
       AND c.source_type = 'blog'"> 
     <field column="blogMessage" name="blogMessage" clob="true" /> 
     <field column="commentMessage" name="commentMessage" clob="true" /> 
    </entity> 

索引結果如下:

<doc> 
    <str name="id">1</str> 
    <str name="market">12</str> 
    <str name="title">blog of title 1</str> 
    <str name="blogMessage">message of blog 1</str> 
    <str name="commentMessage">message of comment</str> 
    <str name="scondColumn">Im the second column from comment</str> 
    </doc> 

    <doc> 
    <str name="id">1</str> 
    <str name="market">12</str> 
    <str name="title">blog of title 1</str> 
    <str name="blogMessage">message of blog 1</str> 
    <str name="commentMessage">message of comment - Im the second comment</str> 
    <str name="scondColumn">Im the second column from comment</str>  
    </doc> 

我會說這是愚蠢的,因爲我得到了太多的索引數據相同的博客只是評論是不同的。是否可以將'註釋'設置爲'subentity',如下所示:

<entity name="blog" dataSource="mssqlDatasource" pk="id" 
     transformer="ClobTransformer" 
     query="SELECT b.id, b.market, b.title AS blogTitle, b.message AS    
       blogMessage 
       FROM blog b"> 
     <field column="blogMessage" name="blogMessage" clob="true" /> 

      <entity name="comment" dataSource="mssqlDatasource" pk="id" 
      transformer="ClobTransformer" 
      query="SELECT c.message as commentMessage, c.secondColumn 
       FROM comment c 
       WHERE c.source_id = ${blog.id}"> 
      <field column="commentMessage" name="commentMessage" clob="true" />    
      </entity> 
    </entity> 

這可能嗎?結果如何(直到星期一才能測試)?

回答

0

如果你想填補一個多值註釋字段每個博客文檔就快,你想要的CachedSqlEntityProcessor

礦往往看起來很多像這樣(我要離開了CLOB變壓器位,但你顯然需要他們)

<entity name="blog" 
     query="SELECT b.id, 
         b.market, 
         b.title AS blogTitle, 
         b.message AS    
       blogMessage 
       FROM blog b"> 
    <entity name="blog_comment" 
      query="SELECT c.message as commentMessage, 
          c.secondColumn, 
          c.blog_id 
      FROM comment c" 
    processor="CachedSqlEntityProcessor" 
    where="blog_id=blog.id"/>  
<entity> 

的文檔應該是這樣的:

<doc> 
    <str name="id">1</str> 
    <str name="market">12</str> 
    <str name="title">blog of title 1</str> 
    <str name="blogMessage">message of blog 1</str> 
    <arr name="commentMessage"> 
     <str>message of comment</str> 
     <str>message of comment - Im the second comment</str> 
    </arr> 
    <arr name="secondColumn"> 
     <str>Im the second column from comment</str> 
     <str>Im the second column from comment</str> 
    </arr> 
</doc> 

你可能想要做多層嵌套的實體,一個查詢對於每一列,如果你想避免重複值。