Tag Archives: facet

Solr使用Facet功能及其它

最近在折腾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

 

Solr使用小结

最近在使用solr搭建公司网站的搜索,到目前为止,刚好3周时间,Solr搭建的引擎也上线了,即将正式提供服务。总结一下这过程中遇到的一些问题,及最终解决的方法。

几乎是从0开始学习solr与lucene,经过了三个星期的努力,基本上把solr能提供的功能都了解。针对项目的业务需求,都从solr找到了现成的方案来实现。其中有过很多的纠结,不过好在这些困难都克服了。目前的项目主要用到了solr的下面几个功能:

facet:对查询的若干字段时间统计,使用过程中发现这个功能对于多值的域也非常有用,折腾了很长时间,才在昨天做了一下实验,搞定了这个问题。另外在这过程中也发现了Solr本身提供的DataImportHandler非常不靠谱,在导入多值的field时会存在问题。facet在对multiValued的field做统计时,会把搜索结果中facet.field的包含的所有的值一起做统计,这个功能在某些场合非常有用。

fq:运用了大量的fq,用来对结果做进一步的查询。在使用过程中详细了看了lucene的查询语法,基本上把这个东西用熟悉了。

hl:毫无疑问,这个功能是搜索必须的。

boost:通过在查询串的q中添加_val_:可以影响结果的打分,这是影响boost score的一个很好的方式。solr 3.1之后提供的edismax也能实现这样的功能,而且更强大。在使用过程中,对于这个值的取值非常纠结,取值太大了会完全影响文本相关性。
目前对solr的使用仅仅停留在使用其提供的功能满足业务需求的阶段,对于更深层次的东西并未深究。对于分词器,requestHandler等都没有进行定制,这些等数据量上来或者有新的需求后,再来做进一步的研究吧。