1

シングルコアの solr インスタンスを実行しています。2 種類のドキュメントを保存したいと考えています。

  1. ユーザーの基本プロファイル。(フィールド: uid : "1" , docType="profile"..)
  2. 各ユーザーが所有する車。(フィールド uid:"1"、docType="cars"...)

1 には、ユーザーごとに 1 つのドキュメントがあります。2 には、ユーザーごとに複数のドキュメント (それぞれ別の車) があります。

設計上の理由により、車の複数値フィールドは必要ありません。ユーザーごとに 1 台の車に対して複数のドキュメントが必要です。

スキーマで uid を一意のフィールドとして宣言すると、後で追加された車のドキュメントがそのユーザーのプロファイル ドキュメントを上書きするか、以前に追加された同じユーザーの他の車のドキュメントでさえ uid が同じであることを上書きします。私がしようとしていることをどのように達成できますか (つまり、ユーザーごとに 1 つのプロファイル ドキュメントと、ユーザーごとに複数の車のドキュメント)

私はsolrの作業を始めたばかりなので、これは非常に基本的なものであるため、ご容赦ください。

お時間ありがとうございました。

4

3 に答える 3

2

これは、汎用一意識別子を schema.xml に追加することで解決できます。

schema.xml ファイルで、次の fieldType を追加します。

<fieldType name="uuid" class="solr.UUIDField" indexed="true" />

次に、このタイプの新しいフィールドを追加します。

<field name="id" type="uuid" indexed="true" stored="true" default="NEW" />

最後に、このフィールドで uniqueId キーを定義します。

<uniqueKey>id</uniqueKey>

詳細については、Solr wiki の UniqueKey ページを確認してください。

于 2012-08-30T08:50:50.993 に答える
2

ドキュメントのメンテナンスを改善するために、一意のフィールドを用意することをお勧めします。

Solr は、一意の ID に基づいてドキュメントを維持します。同じ既存の ID を持つドキュメントを挿入すると、Solr は以前の ID を上書きします。

あなたの例では、プロファイルと車に同じ uid を使用することは良い解決策ではありません。それらの 1 つだけがその uid を使用するようにします。たとえば、uid をユーザーにのみ割り当て、一意にします。

<uniqueKey>uid</uniqueKey>

ここで、車に異なる ID を与えます。

マルチバリュー フィールドを使用することもできます。例えば、

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

そして、次のようなドキュメントを作成できます。

<doc>
  <field name="uid">UserID</field>
  <field name="name">User Name</field>
  <field name="cars">Car 1</field>
  <field name="cars">Car 2</field>
  <field name="cars">Car 3</field>
</doc>
于 2012-08-30T11:46:05.827 に答える
0

ドキュメントをインデックスにどのように配置するかによって、uid と docType の組み合わせが一意である場合、連結された人工キーを作成できます。無意味なキーを取得しますが、UUIDField を使用することももちろん有効なオプションです。

于 2012-08-30T11:16:45.550 に答える