2013-03-20 9 views
13

Dostaję poniżej błędu w mojej konfiguracji solr.Solr 4.2 - czym jest _version_field?

Caused by: org.apache.solr.common.SolrException: Unable to use updateLog: _version_field must exist in schema, using indexed="true" stored="true" and multiValued="false" (_version_ does not exist) 
     at org.apache.solr.core.SolrCore.<init>(SolrCore.java:806) 
     at org.apache.solr.core.SolrCore.<init>(SolrCore.java:619) 
     at org.apache.solr.core.CoreContainer.createFromLocal(CoreContainer.java:1021) 
     at org.apache.solr.core.CoreContainer.create(CoreContainer.java:1051) 
     ... 10 more 
Caused by: org.apache.solr.common.SolrException: Unable to use updateLog: _version_field must exist in schema, using indexed="true" stored="true" and multiValued="false" (_version_ does not exist) 
     at org.apache.solr.update.UpdateLog.init(UpdateLog.java:245) 
     at org.apache.solr.update.UpdateHandler.initLog(UpdateHandler.java:84) 
     at org.apache.solr.update.UpdateHandler.<init>(UpdateHandler.java:134) 
     at org.apache.solr.update.DirectUpdateHandler2.<init>(DirectUpdateHandler2.java:95) 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
     at java.lang.reflect.Constructor.newInstance(Constructor.java:532) 
     at org.apache.solr.core.SolrCore.createInstance(SolrCore.java:526) 
     at org.apache.solr.core.SolrCore.createUpdateHandler(SolrCore.java:597) 
     at org.apache.solr.core.SolrCore.<init>(SolrCore.java:790) 
     ... 13 more 
Caused by: org.apache.solr.common.SolrException: _version_field must exist in schema, using indexed="true" stored="true" and multiValued="false" (_version_ does not exist) 
     at org.apache.solr.update.VersionInfo.getAndCheckVersionField(VersionInfo.java:57) 
     at org.apache.solr.update.VersionInfo.<init>(VersionInfo.java:83) 
     at org.apache.solr.update.UpdateLog.init(UpdateLog.java:242) 
     ... 23 more 

Chciałem wiedzieć, że to, co jest _version_field i dlaczego wymagana jego koniecznością?

Czy ktoś może mi coś zasugerować?

Odpowiedz

14

Pole _version_ jest polem wewnętrznym, które jest używane przez procedurę częściowej aktualizacji, proces dziennika aktualizacji i przez SolrCloud. Jest używany tylko wewnętrznie w tych procesach, a proste podanie pola _version_ w pliku schema.xml powinno wystarczyć.

Jeśli potrzebujesz informacji na temat tego, co się dzieje z _version_, odwiedź stronę this website, aby dowiedzieć się więcej o procesie aktualizacji "optymistycznej współbieżności", który używa _version_.

+0

Czy dodanie tego pola do schematu ma wpływ na rozmiar indeksu? – Krunal

+0

@Krunal: Jak myślisz, co stanie się po dodaniu dodatkowego atrybutu do każdego dokumentu? – ashish

+0

@ashish, przetestowaliśmy to, aby zrozumieć wpływ na rozmiar indeksu i wydajność. Nie stwierdziliśmy znaczących zmian wielkości indeksu ani wydajności. Postanowiliśmy więc pozostawić pole w naszym schemacie, aby w przyszłości mogło ono obsługiwać częściową aktualizację. – Krunal

27

dodać poniższą definicję pola wewnątrz „pole” tag w schema.xml

<field name="_version_" type="long" indexed="true" stored="true" multiValued="false"/> 
+0

Myślę, że masz na myśli 'typr =" slong "'. 'long' nie wydaje się działać w Solr 4.4. –

+0

w rzeczywistości nie było potrzeby definiowania pola wersji wcześniej, jest obowiązkowe, gdy solr dodaje funkcję aktualizacji dokumentu częściowo – ashish

+0

@SalvatoreIovene z 4.10, "slong" nie działał, ale "długo" zrobił. – mrmuggles

1

Jeśli go usunąć, należy również usunąć transakcję z zalogowaniem z solrconfig.xml. Zobacz link.