提升软件性能,通常喜欢去调整各种启动参数,这没有多大意义,小伎俩。 性能优化要从架构和策略入手,才有可能得到较大的收益

Solr的查询是基于Field的,以Field为基本单元,例如一个文章站要索引

class Article
{
   String title;
   String content;
   String tags;
}

查询参数: q=title:big && content:six

Solr会顺序执行两次 field查询 ,这个开销非常大。 实际例子 :50万条记录,一次在6,7个字段上检索,24 core的服务器也需要10-20ms

如果把title和content 合并,那只需要查询一次,性能可以提升50%

在生成索引xml的时候,把title和content填入同一个字段,就能达到这种效果,但是产生新的问问题

无法对title和content的查询分别指定权重了,一般来说,title的权重要高于content

Solr给出一种解决方法:在schema中使用 copyField

上述的Article Schema可以写成如下这种格式,就能达到效果

<field name="title" type="text_general" indexed="true" stored="true"/>
<field name="content" type="text_general" indexed="true" stored="true"/>
<field name="tags" type="text_general" indexed="true" stored="true"/>
<field name="text" type="text_general" indexed="true" stored="false" multiValued="true"/>
<copyField source="title" dest="text"/>
<copyField source="content" dest="text"/>
<copyField source="tags" dest="text"/>

这种schema定义方式,既可以对单个field指定查询权重,也可以在泛查询的时候提升性能,同时生成索引数据的时候不需要多写任何代码

本文地址: http://lutaf.com/200.htm 鲁塔弗原创文章,欢迎转载,请附带原文链接