复制字段
您可能希望以多种方式解释某些文档字段。Solr 提供了一种机制来复制字段,以便您可以将多个不同的字段类型应用于单个传入的信息。
您要复制的字段的名称是源,副本的名称是目标。在模式文件中,复制字段非常简单
<copyField source="cat" dest="text" maxChars="30000" />
在此示例中,我们希望 Solr 将 cat
字段复制到名为 text
的字段。字段在分析之前被复制,这意味着您可以拥有两个具有相同原始内容的字段,但它们使用不同的分析链,并且以不同的方式存储在索引中。
在上面的示例中,如果 text
目标字段在输入文档中具有自己的数据,则 cat
字段的内容将作为附加值添加 - 就像所有值最初都是由客户端指定的那样。如果字段最终会获得多个值(来自多值源或来自多个 copyField
指令),请记住将字段配置为 multivalued="true"
。
此功能的常见用途是创建一个单一的“搜索”字段,当用户或客户端不指定要查询的字段时,该字段将充当默认查询字段。例如,title
、author
、keywords
和 body
可能都是默认情况下应搜索的字段,每个字段都有复制字段规则,以复制到 catchall
字段(例如,它可以命名为任何名称)。稍后,您可以在 solrconfig.xml
中设置一个规则,默认搜索 catchall
字段。需要注意的是,使用复制字段时,您的索引将会增长。但是,这是否会给您带来问题以及最终大小将取决于正在复制的字段数量、正在复制到的目标字段的数量、正在使用的分析以及可用的磁盘空间。
maxChars
参数是一个 int
参数,用于建立从源值复制的字符数的上限,以便在构造添加到目标字段的值时使用。当您要从源字段复制一些数据,但同时控制索引文件的大小时,此限制很有用。
copyField
的源和目标都可以包含前导或尾随星号,这将匹配任何内容。例如,以下行会将所有与通配符模式 *_t
匹配的传入字段的内容复制到 text 字段。
<copyField source="*_t" dest="text" maxChars="25000" />
只有当 |
复制是在流源级别完成的,并且一个复制操作不会触发另一个复制操作。这意味着复制字段不能被链接,即 *你不能* 从 here
复制到 there
,然后再从 there
复制到 elsewhere
。但是,同一个源字段可以被复制到多个目标字段。
<copyField source="here" dest="there"/>
<copyField source="here" dest="elsewhere"/>