最近在折腾Solr时又碰到了一些问题,主要都是在实现业务上的一些问题,对于其它人应该也会碰到,记录一下,以备参考。
1、在修改了schema.xml中某个字段的类型后,必须先清空索引,再进行重建索引的操作,否则该字段的值将会出现乱码的情况。因此在设计schema时需要多加注意,尽量使用不易改变的类型。在修改字段类型时,也记得需要清空索引做重建。
2、在对结果中的多个字段做faect时,最终返回的多个facet段的排序顺序不一致。如一条记录中包含 id,name, group_name, group_id 等字段,现在对查询name同时对group_name,group_id做facet,查询的url如下:
http://127.0.0.1:8080/solr/select?q=solr&facet=on&facet.field=group_name&facet.field=group_id&wt=json
最终Solr返回的结果中,group_name的facet段:
<int name=”3G上网”>10</int><int name=”电磁炉”>10</int><int name=”电视盒/卡”>10</int>
与group_id返回的facet段:
<int name=”46″>10</int><int name=”86″>10</int><int name=”183″>10</int>
并不是一一对应的。facet组件对于结果默认是按数量排序,但是在数量相同时,两个facet段就会出现问题了。最终我们的解决方法是将两个字段合并成一个字段,然后在程序端做相应的处理。
3、Facet组件在对配置了Analysis等的字段做facet统计时,是按照Term来做的,所以在做Facet时会对该字段先做分词,再针对分词做facet操作,得出的结果可能并不是实际想要的。因此对于facet字段尽量采用string 或数值类型。
Solr提供的Facet功能非常实用,提供的功能也非常强大 ,而且仍然在不断的改进中,在使用时认真阅读相关文档,了解其中的细节才能保证不误用其中的特性。
http://wiki.apache.org/solr/SimpleFacetParameters
http://wiki.apache.org/solr/SolrFacetingOverview