N D*_*are 11 java solr unique-key solrj solr-schema
我有一个LocationIndex
在solr中命名的索引,其字段如下:
<fields>
<field name="solr_id" type="string" stored="true" required="true" indexed="true"/>
<field name="solr_ver" type="string" stored="true" required="true" indexed="true" default="0000"/>
// and some more fields
</fields>
<uniqueKey>solr_id</uniqueKey>
Run Code Online (Sandbox Code Playgroud)
但现在我想改变架构,这样独特的密钥必须是复合台现有本领域solr_id
和solr_ver
......东西如下:
<fields>
<field name="solr_id" type="string" stored="true" required="true" indexed="true"/>
<field name="solr_ver" type="string" stored="true" required="true" indexed="true" default="0000"/>
<field name="composite-id" type="string" stored="true" required="true" indexed="true"/>
// and some more fields
</fields>
<uniqueKey>solr_ver-solr_id</uniqueKey>
Run Code Online (Sandbox Code Playgroud)
搜索后我发现可以通过在schema中添加以下内容:(ref:Solr Composite来自模式中现有字段的唯一键)
<updateRequestProcessorChain name="composite-id">
<processor class="solr.CloneFieldUpdateProcessorFactory">
<str name="source">docid_s</str>
<str name="source">userid_s</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>
Run Code Online (Sandbox Code Playgroud)
所以我改变了架构,最后它看起来像:
<updateRequestProcessorChain name="composite-id">
<processor class="solr.CloneFieldUpdateProcessorFactory">
<str name="source">solr_ver</str>
<str name="source">solr_id</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>
<fields>
<field name="solr_id" type="string" stored="true" required="true" indexed="true"/>
<field name="solr_ver" type="string" stored="true" required="true" indexed="true" default="0000"/>
<field name="id" type="string" stored="true" required="true" indexed="true"/>
// and some more fields
</fields>
<uniqueKey>id</uniqueKey>
Run Code Online (Sandbox Code Playgroud)
但是在添加文档时它会给我错误:
org.apache.solr.client.solrj.SolrServerException: Server at http://localhost:8983/solr/LocationIndex returned non ok status:400, message:Document [null] missing required field: id
Run Code Online (Sandbox Code Playgroud)
我没有得到模式的哪些变化需要按预期工作?
在我添加的文档中,它包含字段solr_ver
和solr_id
.如何以及在哪里(solr)id
通过将这些字段组合起来创建字段solr_ver-solr_id
?
编辑:
在这个链接给出了如何引用这个链.我无法理解如何在架构中使用它?我应该在哪里进行更改?
Pai*_*ook 10
因此,看起来您已正确定义了updateRequestProcessorChain,它应该可以正常工作.但是,您需要将其添加到solrconfig.xml文件而不是schema.xml.您提供的附加链接向您展示了如何修改solrconfig.xml文件并将定义的updateRequestProcessorChain添加到/update
solr实例的当前请求处理程序中.
所以找到以下内容:
<updateRequestProcessorChain>
到solrconfig.xml文件.更新<requestHandler name="/update" class="solr.UpdateRequestHandler">
solrconfig.xml文件中的条目并对其进行修改,使其如下所示:
<requestHandler name="/update" class="solr.UpdateRequestHandler">
<lst name="defaults">
<str name="update.chain">composite-id</str>
</lst>
</requestHandler>
Run Code Online (Sandbox Code Playgroud)然后,这应该执行您定义的更新链,并在将新文档添加到索引时填充id字段.
归档时间: |
|
查看次数: |
10714 次 |
最近记录: |