日付範囲ファセットの並び順

トピック作成者:ks-solruserml-bot (2024/08/11 16:49 投稿)
3
CloseClose

(The bot translated the original post https://lists.apache.org/thread/qxh8cbb9l1rqyzb3v0m7dn891k84rk04 into Japanese and reposted it under Apache License 2.0. The copyright of posted content is held by the original poster.)

SolrJのJsonファセットAPIを使用して、日付の範囲に対するファセットを取得しています。

DateFacet df = (DateFacet)f;
RangeFacetMap rfm = new RangeFacetMap(df.getField(), df.getStartDate(), df.getEndDate(),
df.getSpan().getKeyword())
.setMinCount(1);

並び順をインデックスに変更する方法がわかりません(出力を日付順にしたいです)。結果はカウントでソートされて表示されます。次のようにソートフィールドを追加してみました:

rfm.put("sort","count asc");

しかし、効果はありませんでした。JsonファセットAPIを使用して、日付範囲のファセットの並び順を変更するにはどうすればよいですか?

返信投稿者:ks-solruserml-bot (2024/08/11 16:50 投稿)

これは...理解できません。

私の知る限り、JSON範囲ファセットで返される可能性のある唯一のソート順は、「インデックス」順(または、より具体的には「バケット値の自然順序」)です。

つまり、あなたが求めていることは、本来なら得られるはずのものであり、あなたが得ていると言っているものは実際には得られないはずです。
(以下の例を参照)

あなたのソルジャ(SolrJ)のコードで、QueryResponseを消費している部分はどのようになっていますか?

curl 'http://localhost:8983/solr/techproducts/query?rows=0&omitHeader=true' -d '

{
  "query": "*:*",
  "facet": {
    "prices": {
      "type": "range",
      "field": "price",
      "start": 0,
      "end": 100,
      "gap": 20
    }
  }
}'
{
  "response": {
    "numFound": 32,
    "start": 0,
    "numFoundExact": true,
    "docs": []
  },
  "facets": {
    "count": 32,
    "prices": {
      "buckets": [
        {
          "val": 0.0,
          "count": 5
        },
        {
          "val": 20.0,
          "count": 0
        },
        {
          "val": 40.0,
          "count": 0
        },
        {
          "val": 60.0,
          "count": 1
        },
        {
          "val": 80.0,
          "count": 1
        }
      ]
    }
  }
}
curl 'http://localhost:8983/solr/techproducts/query?rows=0&omitHeader=true' -d'

{
  "query": "*:*",
  "facet": {
    "prices": {
      "type": "range",
      "field": "manufacturedate_dt",
      "start": "1900-01-01T00:00:00Z",
      "end": "2200-01-01T00:00:00Z",
      "gap": "+100YEARS"
    }
  }
}'
{
  "response": {
    "numFound": 32,
    "start": 0,
    "numFoundExact": true,
    "docs": []
  },
  "facets": {
    "count": 32,
    "prices": {
      "buckets": [
        {
          "val": "1900-01-01T00:00:00Z",
          "count": 0
        },
        {
          "val": "2000-01-01T00:00:00Z",
          "count": 11
        },
        {
          "val": "2100-01-01T00:00:00Z",
          "count": 0
        }
      ]
    }
  }
}

SolrJを使用して、期待されるバケットが期待される順序(バケット数ではなくバケット値順)で返されることを確認するテストがこちらです...

https://github.com/apache/solr/blob/releases/solr/9.0.0/solr/solrj/src/test/org/apache/solr/client/ref_guide_examples/JsonRequestApiTest.java#L573-L596

-Hoss
http://www.lucidworks.com/

返信投稿者:ks-solruserml-bot (2024/08/11 16:50 投稿)

はい、確かに、私の説明が正しくありませんでした...まったく。

それでも一つ質問があります。日付範囲のファセットのソート順を変更する方法はありますか?それとも、自分でそれを行う必要がありますか?場合によっては、結果をカウント順で表示したいこともあり、他の場合には、ボタン範囲でソートされた結果を見たいこともあります。

返信投稿者:ks-solruserml-bot (2024/08/11 16:50 投稿)

レンジファセットのソートを変更するサーバーサイドのオプションはありません。これは、クライアントサイドで行うのと同じくらい簡単で効率的だからです。

(Solrの一般的な設計思想として、「クライアントサイドで不可能、もしくは効率的でないことだけをサーバーサイドで行う」というものがあります)

フィールドファセットではソートがサポートされていますが、これはクライアントサイドで効率的に行うことが不可能(すべての可能なタームバケットをフェッチする必要があるため)だからです。一方、クエリ&レンジファセットはすでにすべてのバケットをクライアントに返すので、Solrがソートを行う意味はほとんどありません。ソケットを開いたままの時間が増え、"高価な"(限られた)SolrのCPUを消費することになりますが、クライアントCPUの方がより簡単にスケーラブルです。

-Hoss
http://www.lucidworks.com/

トピックへ返信するには、ログインが必要です。

KandaSearch

Copyright © 2006-2024 RONDHUIT Co, Ltd. All Rights Reserved.

投稿の削除

この投稿を削除します。よろしいですか?