复制字段

您可能希望以多种方式解释某些文档字段。Solr 有一种机制可以复制字段,以便您可以将几种不同的字段类型应用到单条传入信息。

您要复制的字段的名称是,副本的名称是目标。在 schema 文件中,复制字段非常简单

<copyField source="cat" dest="text" maxChars="30000" />

在此示例中,我们希望 Solr 将cat字段复制到名为text的字段。字段在分析之前被复制,这意味着您可以有两个具有相同原始内容的字段,但它们使用不同的分析链并在索引中以不同的方式存储。

在上面的示例中,如果text目标字段在输入文档中具有自己的数据,则cat字段的内容将作为附加值添加,就像所有值最初都是由客户端指定的。请记住,如果字段最终将获得多个值(来自多值源或多个copyField指令),请将您的字段配置为multivalued="true"

此功能的常见用法是创建一个单一的“搜索”字段,当用户或客户端未指定要查询的字段时,该字段将用作默认查询字段。例如,titleauthorkeywordsbody都可能是应该默认搜索的字段,每个字段都有复制字段规则以复制到catchall字段(例如,可以将其命名为任何名称)。稍后,您可以在solrconfig.xml中设置规则以默认搜索catchall字段。需要注意的一点是,使用复制字段时,您的索引会增长。但是,这是否会给您带来问题以及最终大小将取决于被复制的字段数、被复制到的目标字段数、正在使用的分析以及可用的磁盘空间。

maxChars 参数是一个 int 参数,它为从源值中复制到目标字段中添加的值所复制的字符数建立了一个上限。此限制对于想要从源字段中复制一些数据,但同时控制索引文件大小的情况非常有用。

copyField 的源和目标都可以包含前导或尾随星号,这将匹配任何内容。例如,以下行将把所有与通配符模式 *_t 匹配的传入字段的内容复制到文本字段中。

<copyField source="*_t" dest="text" maxChars="25000" />

copyField 命令仅当 source 参数也包含一个星号 (*) 字符时,才能在 dest 参数中使用通配符 (*) 字符。copyField 将源字段中的匹配 glob 用于将源内容复制到的 dest 字段名。

复制在流源级别进行,并且没有复制馈送到另一个复制中。这意味着复制字段不能链接,即你不能here 复制到 there,然后从 there 复制到 elsewhere。但是,同一个源字段可以复制到多个目标字段中

<copyField source="here" dest="there"/>
<copyField source="here" dest="elsewhere"/>