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"> 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 >

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

したがって、一度に送信メールと受信メールの数を一度に取得できます。結果をグループ化するためにJavaコードを使用する必要はありません。

結果をsolr自体にグループ化する方法がsolrに存在するので、結果をグループ化するJavaコードを回避でき、ページネーションを実現できます。

[注:recipientmailidとsenderemailidはどちらも複数値です。必要に応じて、後でsenderemailidを単一値に変更できます。ただし、受信者のメールIDは複数値にする必要があります。]

4

1 に答える 1

0

facet.field を複数回使用でき、両方のファセット結果を取得できますが、2 つの別個のオブジェクトになります。このようにして、クエリを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 に答える