1

最近、SolrCloud の調査を開始し、CloudSolrServer クライアントを使用してドキュメントのインデックスを作成しようとしています。私が見ている問題は、CloudSolrServer オブジェクトで明示的なコミットを開始しないと、ドキュメントがインデックス化されないことです。ここに私のコードスニペットがあります:

コード>
CloudSolrServer サーバー = 新しい CloudSolrServer("localhost:2181");
server.setDefaultCollection("collection1");
SolrInputDocument doc = 新しい SolrInputDocument();
doc.addField("id", "http://test.com/akn/test6.html");
doc.addField("Source2", "aknsource");
doc.addField("url", "http://test.com/akn/test6.html");
doc.addField("タイトル", "SolrCloud ロック");
doc.addField("テキスト", "これはサンプル テキストです");
UpdateResponse resp = server.add(doc);
//UpdateResponse res = server.commit();

それぞれ 1 つのレプリカと 1 つの Zookeeper インスタンスを持つ 2 つのシャードがあります。

このテスト コードを実行すると、リクエストがノードにヒットしたことがわかります。ログからの出力は次のとおりです。


INFO  - 2013-09-26 03:19:04.981; 
org.apache.solr.update.processor.LogUpdateProcessor; [collection1] 
webapp=/solr path=/update params={distrib.from= 
http://ec2-1-2-3-4.us-west-1.compute.amazonaws.com:8983/solr/collection1/&update.distrib=TOLEADER&wt=javabin&version=2} 
{add=[http://test.com/akn/test6.html (1447223565945405440)]} 0 42 
INFO  - 2013-09-26 03:19:19.943; 
org.apache.solr.update.DirectUpdateHandler2; start 
commit{,optimize=false,openSearcher=false,waitSearcher=true,expungeDeletes=false,softCommit=false,prepareCommit=false} 
INFO  - 2013-09-26 03:19:20.249; org.apache.solr.core.SolrDeletionPolicy; 
SolrDeletionPolicy.onCommit: commits: num=2 

commit{dir=NRTCachingDirectory(org.apache.lucene.store.MMapDirectory@/mnt/ebs2/TestSolr44/solr/collection1/data/index 
lockFactory=org.apache.lucene.store.NativeFSLockFactory@36ddc581; 
maxCacheMB=48.0 maxMergeSizeMB=4.0),segFN=segments_7,generation=7} 

commit{dir=NRTCachingDirectory(org.apache.lucene.store.MMapDirectory@/mnt/ebs2/Testolr44/solr/collection1/data/index 
lockFactory=org.apache.lucene.store.NativeFSLockFactory@36ddc581; 
maxCacheMB=48.0 maxMergeSizeMB=4.0),segFN=segments_8,generation=8} 
INFO  - 2013-09-26 03:19:20.250; org.apache.solr.core.SolrDeletionPolicy; 
newest commit generation = 8 
INFO  - 2013-09-26 03:19:20.252; org.apache.solr.search.SolrIndexSearcher; 
Opening Searcher@c324b85 realtime 
INFO  - 2013-09-26 03:19:20.254; 
org.apache.solr.update.DirectUpdateHandler2; end_commit_flush 

ログを見ると、コミットは成功しているように見えました。しかし、サーバーにクエリを実行しても、エントリが表示されません。

さて、電源を入れると


UpdateResponse res = server.commit(); 

索引付けされたデータを確認します。ログは次のとおりです。


INFO  - 2013-09-26 03:41:24.433; 
org.apache.solr.update.processor.LogUpdateProcessor; [collection1] 
webapp=/solr path=/update params={wt=javabin&version=2} {add=[ 
http://test.com/akn/test6.html (1447224970494083072)]} 0 12 
INFO  - 2013-09-26 03:41:24.490; 
org.apache.solr.update.DirectUpdateHandler2; start 
commit{,optimize=false,openSearcher=true,waitSearcher=true,expungeDeletes=false,softCommit=false,prepareCommit=false} 
INFO  - 2013-09-26 03:41:24.788; org.apache.solr.core.SolrDeletionPolicy; 
SolrDeletionPolicy.onCommit: commits: num=2 

commit{dir=NRTCachingDirectory(org.apache.lucene.store.MMapDirectory@/mnt/ebs2/TestSolr44/solr/collection1/data/index lockFactory=org.apache.lucene.store.NativeFSLockFactory@36ddc581; maxCacheMB=48.0 maxMergeSizeMB=4.0),segFN=segments_8,generation=8}

commit{dir=NRTCachingDirectory(org.apache.lucene.store.MMapDirectory@/mnt/ebs2/TestSolr44/solr/collection1/data/index lockFactory=org.apache.lucene.store.NativeFSLockFactory@36ddc581; maxCacheMB=48.0 maxMergeSizeMB=4.0),segFN=segments_9,generation=9} INFO - 2013-09-26 03:41:24.788; org.apache.solr.core.SolrDeletionPolicy; newest commit generation = 9 INFO - 2013-09-26 03:41:24.792; org.apache.solr.search.SolrIndexSearcher; Opening Searcher@138ba593 main INFO - 2013-09-26 03:41:24.794; org.apache.solr.update.DirectUpdateHandler2; end_commit_flush INFO - 2013-09-26 03:41:24.794; org.apache.solr.core.QuerySenderListener; QuerySenderListener sending requests to Searcher@138ba593main{StandardDirectoryReader(segments_9:21:nrt _0(4.4):C1 _1(4.4):C1 _3(4.4):C1 _4(4.4):C1 _5(4.4):C1 _7(4.4):C1)} INFO - 2013-09-26 03:41:24.795; org.apache.solr.core.QuerySenderListener; QuerySenderListener done. INFO - 2013-09-26 03:41:24.798; org.apache.solr.core.SolrCore; [collection1] Registered new searcher Searcher@138ba593main{StandardDirectoryReader(segments_9:21:nrt _0(4.4):C1 _1(4.4):C1 _3(4.4):C1 _4(4.4):C1 _5(4.4):C1 _7(4.4):C1)} INFO - 2013-09-26 03:41:24.798; org.apache.solr.update.processor.LogUpdateProcessor; [collection1] webapp=/solr path=/update params={waitSearcher=true&commit=true&wt=javabin&expungeDeletes=false&commit_end_point=true&version=2&softCommit=false} {commit=} 0 308

コミット構成は次のとおりです。

<autoCommit> 
<maxTime>30000</maxTime> 
<openSearcher>false</openSearcher> 
</autoCommit> 

<autoSoftCommit> <maxTime>1000</maxTime> </autoSoftCommit>

ここで何が欠けているのかわからないので、ポインタを高く評価します。

ありがとう

4

3 に答える 3

0

CloudSolrServerLoadBalanced HttpSolrServerを使用しますが、ドキュメントでは「書き込み」コマンドを発行するために使用しないように具体的に述べています。

ドキュメントは正しいマスターに送信する必要があるため、マスター/スレーブ シナリオでのインデックス作成にはこのクラスを使用しないでください。ノード間ルーティングは行われません。

ZooKeeper (または ZooKeeper を含むシャード) を指す通常の HttpSolrServer を作成し、それを使用してドキュメントを挿入しないのはなぜですか (ZooKeeper/マスター レプリカは、それらを他のシャードに送信する処理を行う必要があります)。

于 2013-10-08T08:17:30.030 に答える
0

含めた最初のログでは、openSearcher=false のコミットのみが表示されます。これにより、データが適切にフラッシュされますが、検索可能にはなりません。これは、設定の autoCommit セクションが原因で発生している可能性があります。

貼り付けた構成スニペットは、autoSoftCommit もあり、maxTime が 1 秒であることを示していますが、ログにはソフト コミットは表示されません。構成全体を見ないと、それが実際にアクティブかどうかを判断することはできません。おそらくコメントアウトされています。

于 2013-09-26T20:26:46.797 に答える