私はsolrが初めてです。誰かが以下の質問に対処できますか。1. 現在、1.5 ミル レコードのインデックスがあります。フィールドの値を新しい値に更新する必要があります。どうすればいいのですか。インデックスの再作成になりますか?サンプルコードが役に立ちます。
- インデックス フィールドを追加したいが、コンテンツ全体のインデックスを再作成したくないという別のニーズがあります。ドキュメント ID を持っています。この要件のために、それが役立つ場合は lucene を使用できます。
4.0 で追加されたアトミック アップデート機能を見てみましょう。ドキュメント全体のインデックスを再作成することなく、特定のフィールドの値を変更できます。スキーマ内のすべてのフィールドを (copyFields なしで) 保存する必要があることに注意してください。さらに支援が必要な場合は、より詳細な説明を記入してください。
現在、1.5 ミル レコードのインデックスがあります。フィールドの値を新しい値に更新する必要があります。どうすればいいのですか。インデックスの再作成になりますか?サンプルコードが役に立ちます。
良いニュースは、Solr の最新バージョン (4.3 または 4.4 から始まると思います) では、Atomic Updates と呼ばれるものを実行できることです。ここを参照してください:
http://wiki.apache.org/solr/Atomic_Updates
コーディングの観点からは、目的のフィールドのみを更新しているように見えます。Java SolrJ API を使用すると、次のようになります。
「stuffedAnimals」という複数値フィールドを持つドキュメントがあるとします。このフィールドには、すでに値として「テディベア」と「ぬいぐるみのカメ」が含まれています。「ピンクのフワフワフラミンゴ」のようにアップデートして新しい価値を加えたい。あなたができることは次のとおりです。
SolrInputDocument updateDocument = new SolrInputDocument();
//here you must add the id field with the desired value, corresponding to the doc you want to update:
updateDocument.addField("id", 2312312);
//tell it to add the new value to the existing ones, rather then replace them with it:
updateDocument.addField("stuffedAnimals", new HashMap(){{put("add","pink fluffy flamingo");}});
これに関する問題はパフォーマンスです。これを行うと実際に起こることは、ドキュメントが完全に削除され、(フィールドだけでなく) 再追加されることです。このような操作をたくさん行う予定がある場合は、これを考慮する必要があります。
インデックス フィールドを追加したいが、コンテンツ全体のインデックスを再作成したくないという別のニーズがあります。ドキュメント ID を持っています。この要件のために、それが役立つ場合は lucene を使用できます。
上で述べたように、フィールドを更新すると、ドキュメントは実際には完全に書き直されます。つまり、新しいフィールドでもインデックスが再作成されます。Solr 4.4 以前を使用している場合は、schema.xml ファイルで新しいフィールドを宣言する必要があります。Solr 4.5 以降を使用している場合は、schema.xml について心配する必要はありません。
最後に、両方の質問に対するコメントとして、Solr ドキュメントを更新する場合は、そのすべてのフィールドが「保存済み」としてマークされていることを確認してください (schema.xml で保存済み = true)。フィールドの部分的な更新は、(更新が適用された状態で) ドキュメントを削除して再度追加することになるため、特定のフィールドが保存されていないと、Solr は更新後にそれらのフィールドに入力する値を認識できません。