2015-10-13 34 views
0

独特的领域我在Solr的文档作为定义Solr中

<entity name="Category" dataSource="ds1" pk="CategoryId" 
    query="SELECT CategoryId, Description, ImageUrl FROM Category"> 
    <field column="CategoryId" name="CategoryId" /> 
    <entity name="PackCategory" pk="PackId, CategoryId" 
    query="SELECT PackId FROM PackCategory WHERE CategoryId = ${Category.CategoryId}" > 
    <entity name="Pack" pk="PackId" 
     query="SELECT PackId, IsActive FROM Pack WHERE PackId = ${PackCategory.PackId}" > 
     <field column="IsActive" name="IsActive" /> 
     <entity name="PartnerPackTrans" pk="PackId, PartnerId" transformer="TemplateTransformer"> 
     query="SELECT PartnerId FROM PartnerPackTrans WHERE PackId = ${Pack.PackId}" > 
      <field column="PartnerId" name="PartnerId" /> 
     </entity> 
</entity> 
    </entity> 
    </entity> 
    </entity> 

我的唯一ID(Cateogry.CategoryId,Pack.PackId,PartnerPackTrans.PartnerId)的组合。我如何定义这schema.xml中SOLR独特的领域

更新 通过各种后去后,我加入这个我Solr的-config文件

<updateRequestProcessorChain name="id"> 
    <processor class="solr.CloneFieldUpdateProcessorFactory"> 
    <str name="source">CategoryId</str> 
    <str name="source">PartnerId</str> 
    <str name="dest">id</str> 
    </processor> 
    <processor class="solr.ConcatFieldUpdateProcessorFactory"> 
    <str name="fieldName">id</str> 
    <str name="delimiter">-</str> 
    </processor> 
    <processor class="solr.LogUpdateProcessorFactory" /> 
    <processor class="solr.RunUpdateProcessorFactory" /> 
</updateRequestProcessorChain> 

但我得到这个错误Solr中 文件缺少强制性的唯一键字段:ID

我指这个帖子 Solr Composite Unique key from existing fields in schema

我使用Solr的5.3版本

回答

1

Solr中,你可以添加一个unique key

的声明可以用来告知Solr的,有你的索引字段,它应该是所有的文件是唯一的。如果添加的文档与现有文档包含相同的值,则旧文档将被删除。

所以,你的情况,如果你的领域被称为unique,你必须添加:

<uniqueKey>unique</uniqueKey> 

UPDATE

为了回答您的意见,您的schema.xml,你可以创建一个新的字段:

<field name="unique" type="text_general" indexed="true" stored="true" multiValued="true" /> 

之后,你可以复制你想要在新字段中的字段:

<copyField source="Cateogry.CategoryId" dest="unique"/> 
<copyField source="Pack.PackId" dest="unique"/> 
<copyField source="PartnerPackTrans.PartnerId" dest="unique"/> 
+0

我该如何添加列的组合?我的专栏来自不同的实体。 – Nipun

+0

我更新我的答案 – alexf

+0

可以唯一键取多值字段> – Nipun