6

私のユース ケースは、オンライン メディアのタイトルを保持するインデックスです。データのプロバイダーは、カテゴリのリストを各タイトルに関連付けます。SolrJ を使用して、注釈付きの POJO クラスを介してインデックスを設定しています

例えば

@Field("title")
private String title;

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

関連する POJO は

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

}

私の質問には2つの部分があります:

a)これはSolrJを介して可能ですか-ドキュメントには文字列のリストを使用した@Fieldの例のみが含まれているため、シリアル化/マーシャリングは単純な型のみをサポートしていると思いますか?

b)これを保持するスキーマをどのように設定しますか。必要なフィールドに multiValued=true を設定する必要があるだけで、すべて魔法で機能するという素朴な仮定があります。

これを実装し始めたばかりなので、どんな反応でも大歓迎です。

4

1 に答える 1

8

答えはあなたが考えた通りです:

a) シンプルなタイプしか利用できない。したがって、同じタイプのリスト、たとえば文字列があります。ポイントは、lucene ドキュメント内で複雑な型を表すことができないため、それらも逆シリアル化しないことです。

b)問題は、「ドキュメントストア」でリレーショナル思考を表現しようとしていることです。それはおそらく特定のポイントまでしか機能しません。lucene ドキュメント内でカテゴリを表現したい場合は、文字列を使用するだけで、ID も保存する必要はありません。

ID も保存する唯一のポイントは、検索を脇に置きたい場合は、RDBMS でルックアップを行うことです。これを行う場合は、ID とカテゴリ名がソフトリンクされていることを確認する必要があります。これは、すべての 1:n 関係で機能するわけではありません。(n 個の関連テーブルが必須フィールドのみで構成される 1:n の関係はすべて可能です。オプション フィールドがある場合は、可能であればフィールドに空の定数などを入力する必要があります)。

ただし、これらの 1:n 関係がまばらでない場合、フィールドをドキュメントに追加する順序を維持すれば、実際には可能です。したがって、リストをソートしなければ、カテゴリ関係のケースはおそらく表現できます。

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

于 2011-07-09T12:10:39.947 に答える