ITPub博客

首页 > 大数据 > 可视化 > CopyField 的作用

CopyField 的作用

可视化 作者:破棉袄 时间:2015-06-10 14:05:54 0 删除 编辑
solr的index schema中,除了支持基本数值类型的field,还支持一些特别的field,比如较常用的CopyField。以下面的schema配置片断为例:

[html] view plaincopy
  1. <schema name="eshequn.post.db_post.0" version="1.1"    
  2.     xmlns:xi="http://www.w3.org/2001/XInclude">    
  3.      <fields>    
  4.         <!-- for title -->    
  5.         <field name="t" type="text" indexed="true" stored="false" />    
  6.         <!-- for abstract -->    
  7.         <field name="a" type="text" indexed="true" stored="false" />    
  8.         <!-- for title and abstract -->    
  9.         <field name="ta" type="text" indexed="true" stored="false" multiValued="true"/>    
  10.     fields>    
  11.     <copyField source="t" dest="ta" />    
  12.     <copyField source="a" dest="ta" />    
  13. schema>    


[html] view plaincopy
  1. <schema name="eshequn.post.db_post.0" version="1.1"  
  2.     xmlns:xi="http://www.w3.org/2001/XInclude">  
  3.      <fields>  
  4.         <!-- for title -->  
  5.         <field name="t" type="text" indexed="true" stored="false" />  
  6.         <!-- for abstract -->  
  7.         <field name="a" type="text" indexed="true" stored="false" />  
  8.         <!-- for title and abstract -->  
  9.         <field name="ta" type="text" indexed="true" stored="false" multiValued="true"/>  
  10.     fields>  
  11.     <copyField source="t" dest="ta" />  
  12.     <copyField source="a" dest="ta" />  
  13. 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,化多个字段为一个字段,缺点是不能区分各个字段的重要度差别。比如文章的标题和摘要,标题就要比摘要重要性更强,如果有这方面的要求,可以选择查询多个字段的做法。  


在使用copyField的时候如何改变搜索结果排序?

我们都知道,Solr正统的改变排序的方法是设法改变boost,这个可参考:Solr查询时设置字段的boost值,改变默认打分排序

但有时候我们为了提高搜索性能,要使用copyField,还想改变搜索排序,如标题中命中关键字的优先显示,怎么做?

这里有个变通的方法,看如下配置:

<!-- 拷贝需要索引的字段到整合字段中  -->





对,就是在sechema.xml配置的时候,适当的重复拷贝标题字段。当然,这个不是一个非常可靠的办法,因为有时候内容中可能包含非常多的搜索词。





来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29754888/viewspace-1694219/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-07-16

  • 博文量
    180
  • 访问量
    1159064