2016-06-01 4 views
1

solrのダイナミックフィールドを使用してフィルタシステムを開発しようとしています。これらのダイナミックフィールドは製品によって異なる場合があり、フィルタフィールドの認識に役立つ接頭辞はattribute_filter_です。検索クエリがあるので、私はこれらの動的なフィールドに基づいて面白い結果を得たいと思っています。例えばソルのファセットとしてのダイナミックフィールド

私の検索クエリがDOC 1およびDOC2と一致したとき、私はsolr

{ID:1, attribute_filter_color:"white", attribute_filter_brand:"Dell"} 
{ID:2, attribute_filter_color:"red", attribute_filter_category:"electronics"} 
{ID:3, attribute_filter_size:"mobiles", attribute_filter_brand:"samsung"} 

にドキュメントなど3つの製品を持って、私が欲しい色のみ、ブランドやカテゴリをフィルタリングし、その面のフィールドはattribute_filter_colorあり、attribute_filter_brandattribute_filter_category

私の検索クエリがドキュメント2とDOC3に一致し、私が欲しい色、サイズ、カテゴリやブランドをフィルタリングし、その面のフィールドはattribute_filter_colorattribute_filter_sizeattribute_filter_categoryattribute_filter_brandです。

私の検索クエリがdoc1とdoc3と一致すると、フィルタの色、ブランド、サイズが必要なので、ファセットフィールドはattribute_filter_color,attribute_filter_brandattribute_filter_sizeです。

また、これらのフィルタは、10個以上の合計で約300個の製品にすることができます。これにより、GET URLの限界を超える可能性のある300個のファセットフィールドを持つGET URLを作成するための別の問題が発生します。

このjira ticketは、この状況で正規表現がどのように役立つ可能性があるかを示しています。

+0

Solrは、GET引数の長さの問題を回避するために、すべてのパラメータをPOSTデータとして提供します(ほとんどのクライアントはデフォルトでPOSTを使用します)。 – MatsLindh

答えて

0

私の解決策はフィールド名を追加フィールドにインデックスすることで、フィールドを含むドキュメントの場合は"facet_fields": ["attribute_filter_color","attribute_filter_brand"]になります。

ドキュメントの結果セット全体にファセットを生成し、その結果を新しいクエリで使用して、関心のあるフィールドにわたってファセットを生成します。これは余分なクエリになりますが、とにかく面倒を見ている別のフィールドの数が多くなります。facet_fieldsフィールドは、計算して返すことが迅速になります。

関連する問題