2011-07-09 8 views
6

私のユースケースは、オンラインメディアのタイトルを保持するインデックスです。データの提供者は、各タイトルにカテゴリのリストを関連付ける。私はSolrJを使用して、注釈付きPOJOクラスを介してインデックスにデータを入力しています。solrj:インデックスの多値フィールドを使用してリスト<POJO>を保存および検索する方法

@Field("title") 
private String title; 

@Field("categories") 
private List<Category> categoryList; 

関連POJOである

public class Category { 
    private Long id; 
    private String name; 
... 

}

私の質問有する二つの部分:

A)SolrJ介してこのことが可能である - ドキュメントのみ@Fieldの例を含みます文字列のリストを使用しているので、シリアライゼーション/マーシャリングはシンプルな型しかサポートしていないと思いますか?

b)これを保持するためにスキーマを設定する方法を教えてください。私はちょうど仮定する必要があります私はちょうど を設定する必要があります必要なフィールド&のmultiValued = trueそれはすべての魔法で動作します。

私はこれを実装し始めていますので、どんな応答も高く評価されます。

答えて

8

あなたの考えは次のとおりです。

a)シンプルなタイプしかありません。あなたは同じタイプのリストを持っています。文字列。要点は、ルシェン文書内の複雑な型を表すことができないので、それらを逆直列化しないことです。

b)問題は、「ドキュメントストア」でリレーショナル思考を表現することです。それはたぶん特定のポイントにしか作用しません。 lucene文書の中でカテゴリを表現したいのであれば、その文字列を使うだけで、idを格納する必要はありません。

IDを格納する唯一のポイントは、次のとおりです。RDBMSで検索を脇に置いておきたい場合。これを行うには、IDとカテゴリ名がソフトリンクされていることを確認する必要があります。これは、1:nの関係ごとには機能しません。 (任意のフィールドがある場合は、可能であればフィールドに空の空の定数を入れる必要があります)。

ただし、ドキュメントにフィールドを追加する順序を維持している場合、これらの1:nリレーションは実際には疎ではありません。あなたがリストを並べ替えることができない場合、カテゴリの関係のケースはおそらく表現することができます。

位置0 ... nの値でインスタンス化すると、このカテゴリを返すメソッドを実装できます。したがって、このカテゴリに関連するすべてのリストの位置0にある最初のカテゴリを持つ場合、解決策があります。

関連する問題