如何在单个查询中对两个构面查询的结果进行分组..?

时间:2013-03-14 10:30:50

标签: solr facet solr-query-syntax

我有一组文档,其中包含发件人邮件ID和收件人邮件ID。

当我使用像facet.field=senderemailid&facet.limit=10&facet.offset=0这样的构面查询时。这样我就可以获得相应邮件ID发送的邮件总数

结果是

< int name =“xxx@e.com”> 157< int>

< int name =“x11@e.com”> 141< int>

< int name =“x22@e.com”> 32< int>


当我使用facet.field=recipientmailid&facet.limit=10&facet.offset=0时,我可以获得相应邮件ID收到的邮件总数。

结果是

< int name =“x1x@e.com”> 41< int>

< int name =“x22@e.com”> 132< int>

< int name =“x2y@e.com”> 92< int>

一旦我得到了结果,我就使用java代码对结果进行分组,即每个电子邮件ID收到多少个电子邮件,并发送了多少个电子邮件。这样我就无法实现分页。因为两个结果都有所不同电子邮件ID。

我的期望是什么,

< int name =“x22@e.com”>

           < int >  32  < int >

           < int >  132 < int >

&LT; int name =“x22@e.com”&gt;

所以我一眼就可以收到电子邮件和电子邮件。一次性收到电子邮件数。我不需要使用java代码对结果进行分组。

solr本身是否存在solr to group中的任何方式,这样我就可以避免java代码对结果进行分组以及我可以实现分页

[注意:recipientmailid和senderemailid都是多值的。如果有必要,我可以将senderemailid更改为singlevalued.But收件人邮件ID应该是多值的。]

1 个答案:

答案 0 :(得分:0)

你可以多次使用facet.field,你会获得两个方面的结果,但它将是两个独立的对象。这样你就可以减少对solr的查询。 o / p将如下所示

   "facet_counts":{
    "facet_queries":{},
    "facet_fields":{
      "sender":[
        "xyz@ghh.com",21,
        "xyz2@ghh.com",11,
        "xyz3@ghh.com",15,
        "xyz4@ghh.com",2],
      "reciever":[
        "xyz3@ghh.com",21,
        "xyz2@ghh.com",12,
        "xyz1@ghh.com",13,
        "xyz9@ghh.com",4],

是的,你需要至少循环一次结果集!! 尝试facet.pivot。this可能对你有帮助。这是solr4.0功能