2

我有一组文档,其中包含发件人邮件 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" > 4​​1 <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 >

<int name="x22@e.com" >

因此,我可以一口气收到发送的电子邮件和收到的电子邮件计数。我不需要使用 java 代码对结果进行分组。

solr 中是否存在将结果分组到 solr 本身的任何方法,这样我就可以避免 java 代码对结果进行分组,并且可以实现分页

[注意:recipientmailid 和 senderemailid 都是多值的。如果以后有需要我可以将 senderemailid 更改为单值。但是收件人邮件 ID 应该是多值的。]

4

1 回答 1

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 。可能会帮助你。这是 solr4.0 的功能

于 2013-03-18T16:42:15.630 回答