codecamp

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"/>
Solr如何定义字段
Solr动态字段
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

SolrCloud

SolrCloud配置和参数

如何使用AsciiDoc

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }