2

mysqlからsolrにデータをプルしています。フィールドの1つは、group_concat関数を使用して生成され、イベントのすべてのバンドをリストするコンマ区切りのフィールドになります。当時、これが1つのイベントに複数のバンドを保存するための最良の方法だったと思います。ただし、すべてのイベントに対してこのクエリをファセットできるわけではないことがわかりました。

バンドフィールドを文字列に設定し、複数値をtrueに設定しました。

<field name="bands" type="string" indexed="true" stored="true" multiValued="true"/>

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

"パールジャム、アリス、スクリーミングトゥリーズ、エバークリア"、1、 "プリムス、ガガ、ベーコンビット"、1、 "オンドリ、翼、バチ、尾羽"、1、

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

これを適切にファセットするためにバンドフィールドの区切り文字を宣言する方法はありますか、それとも私のアプローチは間違っていますか?

4

1 に答える 1

9

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

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

セパレーターを使用してこれらのバンド名を分割するように Solr に指示することで、出力を保持しgroup_concatて問題を解決することができます。とそのパラメータdata-config.xmlを見てください:RegexTransformersplitBy

splitBy : 文字列を分割して複数の値を取得するために使用し、値のリストを返します

splitByトリックに使用しているのと同じセパレーターを使用して構成すると、group_concat複数の値が得られ、ファセットの見栄えが良くなります。

于 2012-03-28T20:21:28.843 に答える