复制字段

您可能希望以多种方式解释某些文档字段。Solr 提供了一种机制来复制字段,以便您可以将多个不同的字段类型应用于单个传入的信息。

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

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

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

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

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

maxChars 参数是一个 int 参数,用于建立从源值复制的字符数的上限,以便在构造添加到目标字段的值时使用。当您要从源字段复制一些数据,但同时控制索引文件的大小时,此限制很有用。

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

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

只有当 source 参数也包含通配符 (*) 时,copyField 命令才能在 dest 参数中使用通配符 (*) 字符。copyField 使用源字段中的匹配 glob 模式,来确定将源内容复制到的 dest 字段名称。

复制是在流源级别完成的,并且一个复制操作不会触发另一个复制操作。这意味着复制字段不能被链接,即 *你不能* 从 here 复制到 there,然后再从 there 复制到 elsewhere。但是,同一个源字段可以被复制到多个目标字段。

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