< field name = "ta" type = "text" indexed = "true" stored = "false" multiValued = "true" /> fields > < copyField source = "t" dest = "ta" /> < copyField source = "a" dest = "ta" /> schema > < field name = "ta" type = "text" indexed = "true" stored = "false" multiValued = "true" /> fields > < copyField source = "t" dest = "ta" /> < copyField source = "a" dest = "ta" /> schema > 字段t是文章的标题,字段a是文章的摘要,字段ta是文章标题和摘要的联合。添加索引文档时,只需要传入t和a字段的内容,solr会自动索引ta字段。这算不上多高级的功能,不过如果让你来实现这个功能,你会怎么做呢?我接手的搜索系统原来就有类似的功能,它的做法是,将t和a字段的文本合并,塞到ta字段,无可厚非的做法。不过,有人注意到lucene的Document类提供的public final Field[] getFields(String name)类似函数不?也就是说,lucene中的一个name可以对应多个Field。solr在添加索引时,会检查field name是不是copyField集合中的source,是的话就以其value构造dest field。如果dest由多个source构成,就需要将其指定为multiValued。
对于查询来说,如果查询字段要来自多个字段,一种选择是使用CopyField,化多个字段为一个字段,缺点是不能区分各个字段的重要度差别。比如文章的标题和摘要,标题就要比摘要重要性更强,如果有这方面的要求,可以选择查询多个字段的做法。

广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员