【问题标题】:Configuring Solr to use UUID as a key配置 Solr 以使用 UUID 作为密钥
【发布时间】:2013-09-09 12:51:00
【问题描述】:

我正在尝试将 Solr 4 配置为使用 UUID,但到目前为止我没有成功

通过阅读文档,我看到了两种不同的方式来配置 schema.xml 以使用 UUID(两者都不起作用)

两个我都需要写

<fieldType name="uuid" class="solr.UUIDField" indexed="true" />

选项 1: 添加:

<field name="id" type="uuid" indexed="true" stored="true" default="NEW" multiValued="false"/>

并确保删除该行

<uniqueKey>id</uniqueKey>

选项 2 添加:

<field name="id" type="uuid" indexed="true" stored="true" required="true" multiValued="false" /> 

两个选项都无法正常工作并返回 org.apache.solr.common.SolrException:org.apache.solr.common.SolrException: 初始化 QueryElevationComponent 时出错。

我还尝试使用配置在 colrconfig.xml 文件中添加一行:

<updateRequestProcessorChain name="uuid">
<processor class="solr.UUIDUpdateProcessorFactory"> 
    <str name="fieldName">uniqueKey</str> 
</processor>    
<processor class="solr.RunUpdateProcessorFactory" />
</updateRequestProcessorChain>

谢谢,

西蒙

【问题讨论】:

  • 您的基本设置是否可以在不尝试更改 id 字段类型的情况下工作? QueryElevationComponent 错误听起来可能是一般配置问题
  • 是的,当将 id 设置为字符串时一切正常

标签: solr solrj solr4


【解决方案1】:

经过一些工作,这里是解决方案:

在 schema.xml 中,添加(或编辑)字段字段

<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />   

在 solr 配置中,更新链并将链添加到处理程序(例如:for /update/extract):

<updateRequestProcessorChain name="uuid">
  <processor class="solr.UUIDUpdateProcessorFactory">
    <str name="fieldName">id</str>
  </processor>
  <processor class="solr.RunUpdateProcessorFactory" />
</updateRequestProcessorChain>`         

<requestHandler name="/update/extract" 
                startup="lazy"
                class="solr.extraction.ExtractingRequestHandler" >
  <lst name="defaults">
    <str name="lowernames">true</str>
    <str name="uprefix">ignored_</str>
    <str name="captureAttr">true</str>
    <str name="fmap.a">links</str>
    <str name="fmap.div">ignored_</str>
    <str name="update.chain">uuid</str>
  </lst>
</requestHandler>

【讨论】:

  • 您还可以在更新查询 URL 中添加查询参数“&update.chain=uuid”,以触发 UUID 生成,而无需定义自定义请求处理程序
【解决方案2】:

如果不使用 Query Elevation 组件,您可能需要删除它。

QueryElevationComponent 需要定义唯一键,它应该是带有JIRA 的字符串唯一键。

但是,它已通过 Solr 4.0 alpha 修复,因此取决于您使用的 Solr 版本。

此限制为documented in the Solr wiki

【讨论】:

  • 您好 Jayendra,感谢您的回复。我正在使用最新版本的 Solr 4.4.0。此外,根据我对 QueryElevationComponent 的了解,我可以在查询时禁用它,但我的问题是当我将字段 id 定义为 uuid 时,核心将不会加载。无论如何,在我看来,添加 UUId 支持是一项基本操作,我想在不删除任何组件的情况下添加它。
  • 您需要删除查询提升组件,并且禁用它不会起作用,因为它取决于唯一键。
猜你喜欢
  • 2019-10-16
  • 2016-01-28
  • 2015-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-02
  • 2014-06-26
  • 1970-01-01
相关资源
最近更新 更多