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.

例如:

  1. 将新的 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>
  1. 将该链添加到适当的更新处理程序
<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 服务器并索引新文档。