1

私が働いている店は衣料品を売っています。衣類の各アイテムには複数の種類があります。たとえば、シャツAには、赤大、赤中、青大、青中、白大、白中があります。

最初は、各品種をSolrドキュメントとして追加していました。したがって、上記の製品には、それぞれ同じ製品IDを持つ6つのsolrドキュメントを追加しました。結果を製品IDでグループ化するようにsolrを取得しましたが、すべてが完全に機能しました。

ただし、ファセットカウントはすべて品種カウントであり、製品カウントではありませんでした。したがって、たとえば..上記の1つの製品に限定するだけです-(それがシステム内の唯一の製品である場合)。ファセットカウントは次のように表示されます。

赤(2)青(2)白(2)

正解ですが、色ごとに2つのドキュメントが追加されました。しかし、本当に私が見たいのはこれです:

赤(1)青(1)白(1)

各色に1つの製品しかないので。

だから今、私はそれをするために、各solrドキュメントを製品にする必要があると考えています。

その場合、製品を追加し、フィールド「色」を赤、青、白の3倍に追加し、フィールドサイズも3回追加します。しかし、solrは、各色のサイズが実際にはわかりません。たぶん私は小さな白しか持っていません。

ファセットを適切にカウントするためにこれを実行する正しい方法は何ですか?

4

3 に答える 3

8

ここでグループ化(フィールド折りたたみ)を使用してこれを行うことができることがわかりました

http://wiki.apache.org/solr/FieldCollapsing#Request_Parameters

特にこれらのパラメータはクエリに追加されます

group=true
group.field=product_id"
group.limit=100
group.facet=true
group.ngroups=true

group.facetは、ファセットをグループで実際に機能させるものです。

于 2012-09-21T20:00:56.497 に答える
1

2つの選択肢があると思います。

オプション1:

ファセット値のリスト(特定の例では赤、青、白)を取得したら、各ファセット値をフィルターとして元のクエリを再度実行します。たとえば、元のクエリがq=xyz&group.field=ProductIDその後起動された場合q=xyz&group.field=ProductID&group.ngroups=true&fq=color:Red。応答のngroups値は、赤に必要な数を示します。同様に、青と白に対して別々のクエリを実行します。

オプション2:

Product_ColorProductIDと色の両方を含むという別のフィールドを作成します。たとえば、商品のIDがABC123で、色がRed、の場合、Product_ColorはになりますABC123_Red。ここで、色のファセットを取得するには、Product_Color代わりにグループ化する別のクエリを実行ProductIDすると、正しい値で必要なファセットが取得されます。これが機能するように設定group.truncate=trueすることを忘れないでください。

于 2012-04-08T04:23:19.033 に答える
0

ファセットピボットを調べてみることができます。これにより、適切なカウントとフィルタリングを備えたファセットのような単一のドキュメント、ツリーを作成できます。

于 2012-04-08T08:43:08.477 に答える