2

ASP.netアプリケーション用のSolr3.6の操作。SolrNetライブラリを使用しています。

SolrNetを使用してドキュメントをSolrに段階的に追加するために、asp.netで記述されたカスタムプログラムがあります。これは、Solrにドキュメントを挿入するための進行状況を監視します。

問題は、アプリケーションはプロセスが完了したと表示しますが、Solrの結果をチェックインすると、結果に表示されるドキュメントはごくわずかであり、すべてのドキュメントが表示されるわけではありません。15分後に再度確認しましたが、Solrの結果には、最初の結果の約2倍のドキュメントがいくつかリストされています。Solrにドキュメントを追加するプロセスを実行しなかったことに注意してください。

Solrでそれは自然ですか?または、挿入されてコミットされるとすぐにすべてのドキュメントを一覧表示すると想定できますか?このような行動の背後にある理由は何ですか?そしてそれをどのように扱うのですか?

編集1 アプリケーション側で1時間後、ドキュメントの80〜90%をクエリできます。しかし、それでもSolr Admin Queryは25%を超えるドキュメントをリストしません。

4

1 に答える 1

3

カスタム ASP.NET プログラムが Solr へのドキュメントの追加を完了した後で、Solr に commit を発行していますか? 新しいドキュメントは、インデックスにコミットするまで、Solr 内のサーチャーには表示されないためです。

 var solr = ServiceLocator.Current.GetInstance<ISolrOperations<IndexEntry>>();
 solr.Add(entry);   
 solr.Commit();         

<autoCommit>Solr インスタンスがsolrconfig.xml ファイルで何らかの設定で構成されているため、しばらくするとドキュメントが表示されると思います。詳しくはこちら

試してみるべきことの 1 つは、SolrNet を介して「soft-commit」パラメーターを渡して、インデックスに追加した新しいドキュメントをコミットするまでの時間をインデックスに伝えることです。CommitWithin以下は、 5 秒以内にドキュメントをコミットするよう Solr に指示する AddParameterの使用方法を示す小さなコード スニペットです。

var solr = ServiceLocator.Current.GetInstance<ISolrOperations<IndexEntry>>();
solr.Add(entry, new AddParameters { CommitWithin = 5000 });            

コミットは高価な操作であり、Solr はそれら自体をより適切に管理できるためCommitWithin、明示的ではなくパラメーターを使用することをお勧めします。Commit()

于 2012-08-13T11:52:23.930 に答える