Solr: "copyField" 源码中的 "concat" 函数可以调用吗?
Solr: Is it possible to call the "concat" function in the source of the "copyField"?
比如我在下面定义了“copyField”,solr启动时会抛出这个异常:
org.apache.solr.common.SolrException: copyField source :'concat('i1', id1)' 不是 glob,不匹配任何显式字段或 dynamicField。
<copyField source="concat('i1', id1)" dest="test" />
<copyField source="concat('i2', id2)" dest="test" />
但是“concat('i1',id1)”可以设置为查询请求的“fl”而不会出错
您可以借助 Solr 的更新请求处理器
将其存档
您可以使用 ConcatFieldUpdateProcessorFactory
:
Concatenates multiple values for fields matching the specified
conditions using a configurable delimiter.
例如:
- 将新的 updateRequestProcessorChain 添加到 solrconfig.xml:
<updateRequestProcessorChain name="concatFields">
<processor class="solr.CloneFieldUpdateProcessorFactory">
<str name="source">field1</str>
<str name="dest">field4</str>
</processor>
<processor class="solr.ConcatFieldUpdateProcessorFactory">
<str name="fieldName">field4</str>
<str name="delimiter">_</str>
</processor>
<processor class="solr.LogUpdateProcessorFactory" />
<processor class="solr.RunUpdateProcessorFactory" />
</updateRequestProcessorChain>
- 将该链添加到适当的更新处理程序
<requestHandler name="/update/csv" class="solr.UpdateRequestHandler">
<lst name="defaults">
<str name="stream.contentType">application/csv</str>
<str name="update.chain">concatFields</str> </lst> </requestHandler>
有关更新处理器的更多详细信息,请参见下面的 link。
Update Request Processors
注意 : 重新启动 Solr 服务器并索引新文档。
比如我在下面定义了“copyField”,solr启动时会抛出这个异常: org.apache.solr.common.SolrException: copyField source :'concat('i1', id1)' 不是 glob,不匹配任何显式字段或 dynamicField。
<copyField source="concat('i1', id1)" dest="test" />
<copyField source="concat('i2', id2)" dest="test" />
但是“concat('i1',id1)”可以设置为查询请求的“fl”而不会出错
您可以借助 Solr 的更新请求处理器
将其存档您可以使用 ConcatFieldUpdateProcessorFactory
:
Concatenates multiple values for fields matching the specified conditions using a configurable delimiter.
例如:
- 将新的 updateRequestProcessorChain 添加到 solrconfig.xml:
<updateRequestProcessorChain name="concatFields"> <processor class="solr.CloneFieldUpdateProcessorFactory"> <str name="source">field1</str> <str name="dest">field4</str> </processor> <processor class="solr.ConcatFieldUpdateProcessorFactory"> <str name="fieldName">field4</str> <str name="delimiter">_</str> </processor> <processor class="solr.LogUpdateProcessorFactory" /> <processor class="solr.RunUpdateProcessorFactory" /> </updateRequestProcessorChain>
- 将该链添加到适当的更新处理程序
<requestHandler name="/update/csv" class="solr.UpdateRequestHandler"> <lst name="defaults"> <str name="stream.contentType">application/csv</str> <str name="update.chain">concatFields</str> </lst> </requestHandler>
有关更新处理器的更多详细信息,请参见下面的 link。 Update Request Processors
注意 : 重新启动 Solr 服务器并索引新文档。