多个拼接字段的Solr分面搜索

3
我需要一种方法来获取两个组合字段名称的分面。为了让您明白我的意思,看一下当前的查询:
{
  "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":{}
    }
}

我得到了两个facet字段,productMetaTypeproductId。我需要做的是将这些字段结合起来,以便我可以得到类似以下数据的返回结果:
1_PRIMARY_PHOTO, 1,
1_OTHER_PHOTO, 2, 
2_PRIMARY_PHOTO, 0,
2_OTHER_PHOTO, 1

这个“pivot”功能可以做到吗?不幸的是,我们正在运行Solr 3.1,因此无法使用pivot,但如果这是唯一的方法,我可能有一些升级的理由。

我能想到的另一件事就是如何连接字段名。我对Solr还很陌生,不知道什么是可能的。任何建议或帮助都将不胜感激。谢谢您的时间。

1个回答

4

是的,Pivot可以解决问题,但正如你所观察到的,这个功能只在Solr trunk中可用。

将两个字段组合的想法也可以实现。实际上,如果您的字段具有有限数量的值,则最简单和最灵活的方法是使用facet queries

  • productId:1 AND productMetaType:PRIMARY_PHOTO
  • productId:2 AND productMetaType:OTHER_PHOTO
  • productId:1 AND productMetaType:OTHER_PHOTO
  • productId:2 AND productMetaType:PRIMARY_PHOTO

否则,在Solr schema.xml中创建一个新字段,类型为字符串,通过添加先前的文档和此新字段(您可以根据需要生成此新字段,使用'_'作为两个字段值之间的分隔符即可)重新创建索引。


太好了,运行得很顺利!谢谢!现在只要有一种方法可以在响应中命名这些分面查询,这样我就不必解析查询来确定如何处理我的应用程序中的数据。无论如何,我可以让它工作。再次感谢! - Brad
我现在没有Solr实例进行测试,但我认为您可以使用本地参数中的key参数来完成此操作。请参见http://wiki.apache.org/solr/SimpleFacetParameters#key_:_Changing_the_output_key - jpountz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接