复制字段
你可能想要用多种方式诠释文档里的某些字段。solr 有一种创建字段副本的机制,这样你就能对单一的输入信息应用多种不同的字段类型了。
你要复制的字段是 源(source),副本是 目标(destination)。在 schema.xml
里创建字段副本很简单:
<copyField source="cat" dest="text" maxChars="30000" />
这个例子里,我们想要 solr 把 cat
字段复制到 text
字段。字段在解析完成前复制,这意味着你可以有 2 个来源内容完全一样的字段,使用不同的解析流程,保存在不同的索引里。
上面例子里,如果目标字段 text
在输入文档里有其数据,cat
字段的内容将作为附加值添加 - 正如所有的值最初都是来自于客户端指定。不要忘记配置你的字段为 multivalued="true"
,如果他们最终会有多个值(要么是来自于一个多值的源,要么是来自于多个 copyField
配置)
这个功能一个通常的用途是创建单个搜索字段作为默认的查询字段,当用户或客户端未在查询里指定字段时。例如,title
, author
, keyword
, 和 body
可能是默认都应被搜索的字段,将每个字段都复制到一个 catchall
字段(仅作示例,可以用任何名字)。稍后在 solrconfig.xml
设定默认搜索字段为 catchall
。一个警告是使用复制字段索引大小的增长。对于你,还有最终的大小来说,这是否一个问题,取决于要被复制的源字段数量,目标字段的数量,要使用的解析流程,以及可用的磁盘空间。
maxChars
参数,int
类型,设定了从源字段复制到目标字段的字符数上限。这个限制对于想要从源字段复制数据又想控制索引文件大小的场景有用。
copyField
的源字段和目标字段,都可以以星号(*
)开头或结尾,表示匹配任意字符。例如,下面这行将复制所有匹配 *_t
的字段内容到 text
字段
<copyField source="*_t" dest="text" maxChars="25000" />
copyField
命令仅当source
参数也有一个通配符(*
)时,可以在dest
参数使用通配符(*
)。