2015-07-10 52 views
1

我正在使用Solr数据导入器导入某些类别数据。我不想在父查询中使用左连接,因为它太复杂了,我倾向于在配置中使用嵌套对象查询以保持简单。在solr数据导入器的嵌套实体中处理空值

我有3个一对一的关系feature images的一个类别。我的问题是,当mediaItemX_id字段中的值为空时,我该如何处理它?我试过下面的嵌套的配置,但是当值为空它的报告无效的SQL因为嵌套查询不打印null - 它打印空白....

<entity name="category" query="SELECT concat('CATEGORY_', c.id) as docId, c.id, externalIdentifier, name, description, shortDescription, mediaItem1_id, mediaItem2_id, mediaItem3_id, created, lastUpdated, keywords, 'CATEGORY' as docType, 
      name as autoSuggestField 
     FROM categories c inner join base_content bc where c.id = bc.id">   
      <field column="id" name="categoryId" /> 
      <field column="externalIdentifier" name="externalIdentifier" /> 
      <field column="docType" name="docType" /> 
      <field column="name" name="name" /> 
      <field column="description" name="description" />  
      <field column="shortDescription" name="shortDescription" />  
      <field column="created" name="created" dateTimeFormat="yyyy-MM-dd'T'HH:mm:ss" /> 
      <field column="lastUpdated" name="lastUpdated" dateTimeFormat="yyyy-MM-dd'T'HH:mm:ss" /> 
      <field column="publishDate" name="publishDate" dateTimeFormat="yyyy-MM-dd'T'HH:mm:ss" /> 
      <field column="archiveDate" name="archiveDate" dateTimeFormat="yyyy-MM-dd'T'HH:mm:ss" /> 
      <field column="autoSuggestField" name="suburbSuggest" /> 
      <field column="keywords" name="keywords" /> 
      <entity name="mediaItem1" query="SELECT uri, title, altText from media where ${category.mediaItem1_id} is not null and id = ${category.mediaItem1_id}"> 
       <field column="uri" name="featureImage1Url" /> 
       <field column="title" name="featureImage1Title" /> 
       <field column="altText" name="featureImage1AltText" /> 
      </entity> 
      <entity name="mediaItem2" query="SELECT uri, title, altText from media where ${category.mediaItem2_id} is not null and id = ${category.mediaItem2_id}"> 
       <field column="uri" name="featureImage2Url" /> 
       <field column="title" name="featureImage2Title" /> 
       <field column="altText" name="featureImage2AltText" /> 
      </entity> 
      <entity name="mediaItem1" query="SELECT uri, title, altText from media where ${category.mediaItem3_id} is not null and id = ${category.mediaItem3_id}"> 
       <field column="uri" name="featureImage3Url" /> 
       <field column="title" name="featureImage3Title" /> 
       <field column="altText" name="featureImage3AltText" /> 
      </entity> 
</entity> 

回答

0

Solr的支持概念$ {值:默认}在其他地点的更换,所以我想尝试,至少有:

${category.mediaItem1_id} IS NOT NULL AND id = ${category.mediaItem1_id:0} 

我无法找到一个体面的方式来跳过整个实体如果当前值是假的。

+1

谢谢,我试过了,但它不工作,与变量中的空白相同的错误 - SELECT uri,title,altText from media {$ category.mediaItem1_id:-1} = id –

+1

我最终在ifnull中使用了父查询,它的工作原理如下:select concat('CATEGORY_',c.id)as docId,c.id,externalIdentifier,name,description,shortDescription,IFNULL(mediaItem1_id,-1)as mediaItem1_id,IFNULL(mediaItem2_id,-1)as作为mediaItem3_id,创建,LASTUPDATED,关键字, '类别' 为DOCTYPE, 名autoSuggestField 从C类内部联接上c.id = bc.id –

+0

@RichardG base_content BC mediaItem2_id,IFNULL(mediaItem3_id,-1)谢谢,如果你发布了这样的话,我会为你的答案投票;-) – dedek