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