2012-03-28 12 views
2

私はmysqlからsolrにデータをプルしています。フィールドの1つはgroup_concat関数を使用して生成され、イベントのすべてのバンドをリストするコンマ区切りのフィールドになります。当時私はこれが1つのイベントのために複数のバンドを保存する最良の方法だと信じていました。しかし、私はすべてのイベントに対してこの問合せを扱うことができないことを発見しています。Solrファセットカンマ区切りの値を持つ複数の単語

私はbandフィールドをstringに設定し、multivaluedをtrueに設定しました。

結果は、文字列が1つの長い文字列としてファセットされている場合に期待どおりです。

"パール・ジャム、アリス、悲鳴を上げる木、Everclear"、1、 "プライマス、ガガ、ベーコンビット"、1、 "ルースターズ、翼、ドラムスティック、尾羽"、1、

最大このアプローチの問題は、フィールドタイプが文字列で検索可能でないように見える場合です。検索のためのtext_general型であり、ファセット化のための型を持つ複写フィールドを作成する必要があるようです。はい?

バンドフィールドの区切り文字を正しく宣言する方法がありますか、それとも私のアプローチが間違っていますか?

答えて

8

フィールドをトークン化してもファセットの問題は解決しません。単一のバンド名で検索して結果を得ることはできますが、ファセットはさらに悪化します。基本的なルールは、ファセットを作成するために使用されるフィールドにトークン化またはテキストエンハンスメントを使用しないことです。

multiValuedフィールドを使用すると良いですが、実際にはバンドのリストを持つ単一の値を入れています。これは、Solrの関連フィールドの単一の値にマップされた単一の列としてそのリストを返します。

出力をgroup_concatのままにして、data-config.xmlに簡単な変更を加えて、Solrにセパレータを使用してバンド名を分割するよう通知することができます。

splitByRegexTransformerとそのsplitByパラメータを見て、あなたとsplitByを設定した場合、複数の値を取得するために文字列を分割するために使用され、値

の リストを返します。 group_concatと同じセパレータを使用しているので、複数の値を持つことになり、ファセットがよく見えます。

+0

チャームのように働いた!だから私は、検索と同様に、ファセットのための非テキストフィールドを作成し、検索のためにトークン化されているすべてのフィールドに必要なことを聞​​いています。 – bikedorkseattle

+0

+1文字列を複数の値に分割するアプリケーションを作成する必要があると思いました。 – aitchnyu

+1

更新されたスキーマを表示できますか?私は正確な問題 –

関連する問題