Не удается зафиксировать документы с помощью CloudSollServer в SolrCloud

Недавно я начал изучать SolrCloud и пытаюсь индексировать документы с помощью клиента CloudSolvServer. Проблема, которую я вижу, заключается в том, что если я не запускаю явную фиксацию для объекта CloudSolrServer, документы не индексируются. Вот мой фрагмент кода:

code>
CloudSolrServer server = new CloudSolrServer("localhost:2181"); 
server.setDefaultCollection("collection1"); 
SolrInputDocument doc = new 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("title", "SolrCloud rocks"); 
doc.addField("text", "This is a sample text"); 
UpdateResponse resp = server.add(doc); 
//UpdateResponse res = server.commit(); 

У меня есть 2 осколка с 1 репликой каждый и один экземпляр зоопарка.

Как только я запускаю этот тестовый код, я вижу, что запрос попадает в узлы. Вот вывод из журнала:


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>

Не уверен, что мне здесь не хватает, любые указатели будут оценены.

Спасибо


person Shamik    schedule 26.09.2013    source источник


Ответы (3)


В первом журнале, который вы включили, он показывает только фиксацию с openSearcher=false. Это гарантирует, что данные будут правильно сброшены, но не сделает их доступными для поиска. Вероятно, это происходит из-за раздела autoCommit вашей конфигурации.

Фрагмент конфигурации, который вы вставили, показывает, что autoSoftCommit также существует с максимальным временем в одну секунду, но журнал не показывает никаких мягких коммитов. Не видя всей конфигурации, невозможно сказать, действительно ли она активна или нет. Вероятно, это закомментировано.

person elyograg    schedule 26.09.2013

CloudSolrServer использует LoadBalanced HttpSolrServer который в документах специально говорится, чтобы не использовать для выдачи команд «записи»:

Не НЕ используйте этот класс для индексации в сценариях ведущий/подчиненный, поскольку документы должны быть отправлены правильному главному; маршрутизация между узлами не выполняется.

Почему бы вам просто не сделать обычный HttpSolrServer, указывающий на ваш ZooKeeper (или сегмент, содержащий ZooKeeper), и использовать его для вставки документов (реплика ZooKeeper/master должна позаботиться об отправке их по линии на другие сегменты)?

person Shivan Dragon    schedule 08.10.2013

Вам необходимо настроить параметры автомягкой фиксации и жесткой фиксации в файле solrconfig.xml. Еще одна вещь, которую вы можете сделать, это попытаться использовать commitWithin через CloudSolrServer, так как это более гибко и эффективно, чем жесткая фиксация. Вы должны настроить интервал жесткой фиксации примерно на 4-5 минут. (В соответствии с вашими требованиями). См. ссылку ниже для получения более подробной информации.

http://wiki.apache.org/solr/CommitWithin

person Community    schedule 28.10.2013