在solr中定义唯一字段

muk1a3rh  于 2022-11-05  发布在  Solr
关注(0)|答案(1)|浏览(377)

我有一份文件

<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是(类别.类别ID, Package . Package ID,合作伙伴 Package 交易.合作伙伴ID)的组合。我如何定义这是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字段:标识符
我在引用这篇文章Solr Composite Unique key from existing fields in schema
我使用的是solr版本5.3

pbpqsu0x

pbpqsu0x1#

在Solr中,您可以添加唯一键:
声明可以用来通知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"/>

相关问题