2017-02-15 6 views
1

私は、1つのフィールド(thisに似ています)の下にインデックスされた、製品カタログ内のいくつかの動的属性を扱っています。単純な例は、次のようになります。Solrはダイナミックなフィールドを持つ多面ファセットですか?

{id: 1, DYN_ATT:Color||Green, DYN_ATT:Size||Small} 
{id: 2, DYN_ATT:Color||Red, DYN_ATT:Size||Small} 
{id: 3, DYN_ATT:Color||Green, DYN_ATT:Size||Small} 
{id: 4, DYN_ATT:Color||Red, DYN_ATT:Size||Large} 

ただし、これらがすべて異なるファセットであるかのようにマルチセレクトを有効にすることは不可能です。例えば

、ユーザーがUIでGreen色ファセットを選択言う:

[ ]Red 
[ ]Green 
---------- 
[ ]Small 
[ ]Large 

結果のファセットは、ユーザーがRed OR Greenを選択できるようにする(Color可能なすべての値を表示する必要があります。しかしフィルタリングする必要があります。 Greenが別の(論理)椎間で選択されているに基づいてSize面。

[ ]Red 
[x]Green 
---------- 
[ ]Small 

これを実行する方法はありますか? 私は何の答えも見つけていないし、別のアプローチが必要かもしれないと思われる。残念ながら、データ内の属性の種類は大きく異なります。どちらもこれらの作業の

fq={!tag=DYNTAG}DYN_ATT:"Color||Green"&facet.field={!ex=DYNTAG}DYN_ATT 

これはSizeのためにあまりにも多くの結果が得られます。 [ ]Largeのファセットは使用できないはずですが、返されます。ユーザがそれを選択した場合、2つのフィルタは分離しており、結果は得られません。ユーザーが色にを複数選択することができませんので

fq={!tag=DYNTAG}DYN_ATT:"Color||Green"&facet.field=DYN_ATT 

これは、面からRedを除く、少なすぎる結果が得られます。

[x]Red 
[x]Green 

任意のアイデア?

答えて

1

私はこの問題を解決する方法を見つけました。

&facet=true 
&fq={!tag=DYN}DYN_ATT:"Color||Green" 
&facet.field=DYN_ATT 
&facet.field={!ex=DYN key=DYN_ATT_OR}DYN_ATT 

これはDYN_ATTのファセットのための2つの結果が得られます。 それは同じfacet.fieldはこのように、異なるタグを再利用することができる判明します。このような何か:

"facet_fields": { 
    "DYN_ATT": [ 
     // facets filtered based on fq 
    ] 
    "DYN_ATT_OR": [ 
     // facets unfiltered 
    ] 

その後、私はちょうど未選択ファセットの結果を得るためにDYN_ATT内容を使用していた、と選択されたファセットの結果を得るためにDYN_ATT_OR面(私は上のOR-INGのようにしたいものを、複数選択のための)。

関連する問題