3

Solrjを使用してSolrインスタンスに新しいドキュメントを追加しています。私のドキュメントスキーマでは、IDはUUID(solr.UUIDField)です。ドキュメントが作成されるたびに、IDは一意のIDで埋められます。これは、まさに私が望むものです。別のドキュメントを挿入するときに、この一意のIDを取得してフィールド値として追加できることが、アプリケーションで必要になる場合があります。だから私の質問は、ドキュメントを追加した後、solrからこの生成されたuuidを取得するにはどうすればよいですか?

Solrjは、コミット後にこのUpdateResponseオブジェクトを返しますが、新しいuuidを取得する方法がわかりません。

このようなドキュメントを追加しています

CommonsHttpSolrServer server = new CommonsHttpSolrServer(MY_SERVER_URL);

SolrInputDocument doc = new SolrInputDocument();
// [...] multiple addField calls
server.add(doc);
UpdateResponse ur = server.commit();
4

1 に答える 1

4

追加またはコミットからUUIDを取得することはありません。追加またはコミットを実行すると、更新要求ハンドラーはクエリの時間とステータスを返しますが、それ以外のことはあまりありません(成功した場合)。次のように手動でadd/commitを実行すると、HTTP応答の内容を実際に確認できます。

http://localhost:8983/solr/update?stream.body=<add><doc><field name="id">test</field><field name="title">test title</field></doc></add>
http://localhost:8983/solr/update?stream.body=<commit/>

これらのクエリをWebブラウザで実行すると、テストドキュメントが送信され、コミットされます。これで、SolrJで利用できる情報を確認できます(それほど多くはありません)。

Javaで独自の(変更された)更新ハンドラーを作成することもできますが、それは大変な作業のようです。Solrスキーマの「timestamp」フィールドを有効にして、最終変更日でsolrにクエリを実行し、コミットしたばかりの項目を見つけることもできます。

ただし、これらの方法はどちらも主要なハックになります。最善の策は、ドキュメントをSolrに送信する前に、ドキュメントの一意のIDを把握し、その一意のIDを使用してドキュメントを取得することです。生成されたUUIDを使用することは、「ファイアアンドフォーゲットフォーディス」の方法です。忘れたくないので、独自のUUIDを生成する必要があります。

Javaを使用しているので、次のようなコードを使用して、 UUIDを使用するのは非常に簡単です。

CommonsHttpSolrServer server = new CommonsHttpSolrServer(MY_SERVER_URL);

SolrInputDocument doc = new SolrInputDocument();
UUID uuid = UUID.randomUUID();
doc.addField("id", uuid.toString());
// [...] multiple addField calls
server.add(doc);
UpdateResponse ur = server.commit();
于 2011-06-01T17:25:41.993 に答える