在solr中定义唯一字段

时间:2015-10-13 10:23:32

标签: sql-server 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中遇到了这个错误 文档缺少必需的uniqueKey字段:id

我正在推荐这篇文章 Solr Composite Unique key from existing fields in schema

我正在使用solr version 5.3

1 个答案:

答案 0 :(得分:1)

在Solr中,您可以添加unique key

  

声明可用于通知Solr索引中有一个字段对于所有文档都应该是唯一的。如果添加的文档包含与现有文档相同的此字段值,则将删除旧文档。

因此,在您的情况下,如果您的字段被称为unique,则必须添加:

<uniqueKey>unique</uniqueKey>

<强>更新

要回复您的评论,您可以在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"/>