2013-03-20 17 views
13

Tôi gặp lỗi dưới đây trong cấu hình solr của mình.Solr 4.2 - _version_field là gì?

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 

Tôi muốn biết rằng _version_field là gì và tại sao phải yêu cầu?

Ai có thể đề xuất tôi về vấn đề này không ??

Trả lời

14

Trường _version_ là trường nội bộ được sử dụng bởi quy trình cập nhật từng phần, quy trình nhật ký cập nhật và bởi SolrCloud. Nó chỉ được sử dụng trong nội bộ cho các quy trình đó và chỉ cần cung cấp trường _version_ trong tệp schema.xml của bạn là đủ.

Nếu bạn muốn thông tin chính xác những gì đang diễn ra với _version_, bạn có thể truy cập this website để tìm hiểu về quy trình cập nhật "đồng thời lạc quan", sử dụng _version_.

+0

Việc thêm trường này vào Giản đồ có ảnh hưởng đến kích thước chỉ mục không? – Krunal

+0

@Krunal: bạn nghĩ điều gì sẽ xảy ra khi thêm thuộc tính phụ vào từng tài liệu? – ashish

+0

@ashish, chúng tôi đã thử nghiệm điều này để hiểu tác động đến kích thước và hiệu suất của chỉ mục. Chúng tôi thấy không có thay đổi đáng kể về kích thước chỉ mục cũng như hiệu suất. Vì vậy, chúng tôi quyết định rời khỏi trường vào lược đồ của chúng tôi để làm cho nó hỗ trợ cập nhật một phần trong tương lai. – Krunal

27

thêm định nghĩa trường bên dưới bên trong tag "lĩnh vực" trong schema.xml

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

Tôi nghĩ bạn có nghĩa là 'typr =" slong "'. 'long' không xuất hiện để làm việc trên Solr 4.4. –

+0

thực sự không cần phải xác định trường phiên bản trước đó, nó là bắt buộc khi tính năng bổ sung solr để cập nhật tài liệu một phần – ashish

+0

@SalvatoreIovene với 4.10, 'slong' không hoạt động, nhưng 'long' đã làm. – mrmuggles

1

Nếu bạn gỡ bỏ nó, bạn cũng phải loại bỏ các giao dịch đăng nhập từ solrconfig.xml. Xem link.