2012-03-01 51 views
2

我需要一种方法来获取两个组合字段名称的构面。要告诉你我的意思是,看看查询,因为它是现在:Solr在多个级联字段上刻面

{ 
    "responseHeader":{ 
    "status":0, 
    "QTime":16, 
    "params":{ 
     "facet":"true", 
     "indent":"true", 
     "q":"productId:(1 OR 2 OR 3 OR 4)", 
     "facet.field":["productMetaType", 
     "productId"], 
     "rows":"10"}}, 
    "response":{"numFound":4,"start":0,"docs":[ 
     { 
     "productId":1, 
     "productMetaType":"PRIMARY_PHOTO", 
     "url":"1_PRIM.JPG"}, 
     { 
     "productId":1, 
     "productMetaType":"OTHER_PHOTO", 
     "url":"1_1.JPG"}, 
     { 
     "productId":1, 
     "productMetaType":"OTHER_PHOTO", 
     "url":"1_2.JPG"}, 
     { 
     "productId":2, 
     "productMetaType":"OTHER_PHOTO", 
     "url":"2_1.JPG"}] 
    }, 
    "facet_counts":{ 
    "facet_queries":{}, 
    "facet_fields":{ 
     "productMetaType":[ 
     "PRIMARY_PHOTO",1, 
     "OTHER_PHOTO",3], 
     "productId":[ 
     "1",3, 
     "2",1]}, 
    "facet_dates":{}, 
    "facet_ranges":{} 
    } 
} 

我得到两个小场,productMetaTypeproductId。我需要做的是以某种方式结合这些领域,所以我得到的数据如下:

1_PRIMARY_PHOTO, 1, 
1_OTHER_PHOTO, 2, 
2_PRIMARY_PHOTO, 0, 
2_OTHER_PHOTO, 1 

枢轴功能是否做到这一点?不幸的是,我们运行的是Solr 3.1,因此无法使用枢轴,但如果这是实现这一点的唯一方法,那么我可能需要一些升级弹药。

我唯一能想到的其他事情就是如何连接字段名称。我是Solr新手,不知道什么是可能的。任何意见或协助表示赞赏。感谢您的时间。

回答

4

是的,枢轴将工作的伎俩,但正如你所观察到的,这个功能只在Solr中可用。

您的想法结合这两个领域也将工作。其实,如果你的领域有值的数量有限,要做到这一点,最简单,最灵活的方式是使用facet queries

  • 产品编号:1 AND productMetaType:PRIMARY_PHOTO
  • 产品编号:2和productMetaType:OTHER_PHOTO
  • 产品编号:1 AND productMetaType:OTHER_PHOTO
  • 产品编号:2和productMetaType:PRIMARY_PHOTO

否则,只是在你的Solr schema.xml中机智创建一个新的领域字符串类型,通过添加之前的文档重新创建索引,但是使用这个新字段(您可以根据需要生成,使用'_'作为两个字段值之间的分隔符可以很好地工作)。

+0

这很棒!谢谢!现在,如果只有一种方法可以在响应中命名这些方面查询,所以我不必分析查询来找出在应用程序中处理数据的方式。无论如何,我可以完成这项工作。再次感谢! – Brad 2012-03-01 22:32:12

+0

我目前没有Solr实例进行测试,但我认为您可以在本地参数中使用** key **参数来执行此操作。请参阅http://wiki.apache.org/solr/SimpleFacetParameters#key_:_Changing_the_output_key – jpountz 2012-03-01 22:52:17

+0

谢谢,这也很好! – Brad 2012-03-02 02:23:12