Solr索引:复制字段

你可能希望以多种方式解释某些文档字段。
Solr有一个制作字段副本的机制,这样你可以将几种不同的字段类型应用于单个传入信息片段。

你想要复制的字段名称是,副本的名称是目标
在schema文件中,制作字段副本非常简单:

1
<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字段:

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

重要

copyField命令只有在source参数也包含通配符的情况下,才能在dest参数中使用通配符(*)字符。
copyField使用源字段的匹配通配符作为将源内容复制到的dest字段名称。

复制在流源级别完成,没有副本输入到另一个副本中。
这意味着复制字段不能链接,即你不能here复制到there,然后从there复制到elsewhere
但是,同一个源字段可以复制到多个目标字段:

1
2
<copyField source="here" dest="there"/>
<copyField source="here" dest="elsewhere"/>
© 2025 Solr Community of China All Rights Reserved. 本站访客数人次 本站总访问量
Theme by hiero