मेरे डीएसपीएएस उदाहरण के हिस्से के रूप में, मेरे पास एक एसओएलआर भंडार है जिसमें 12 मिलियन उपयोग आंकड़े रिकॉर्ड हैं। कुछ रिकॉर्ड कई एसओएलआर उन्नयन के माध्यम से माइग्रेट हो गए हैं और वर्तमान स्कीमा के अनुरूप नहीं हैं। इन रिकॉर्डों में से 5 मिलियन में मेरी स्कीमा में निर्दिष्ट एक अद्वितीय आईडी फ़ील्ड गुम है।शेरिंग के लिए सामान्य एसओएलआर रिकॉर्ड: _version_ मुद्दे
डीएसपीएएस सिस्टम पुराने उपयोग आंकड़ों के रिकॉर्ड को निम्नलिखित कोड का उपयोग करके एक अलग सौर शार्ड में शेड करने के लिए एक तंत्र प्रदान करता है।
Dspace ठीकरा तर्क:
for (File tempCsv : filesToUpload) {
//Upload the data in the csv files to our new solr core
ContentStreamUpdateRequest contentStreamUpdateRequest = new ContentStreamUpdateRequest("/update/csv");
contentStreamUpdateRequest.setParam("stream.contentType", "text/plain;charset=utf-8");
contentStreamUpdateRequest.setAction(AbstractUpdateRequest.ACTION.COMMIT, true, true);
contentStreamUpdateRequest.addFile(tempCsv, "text/plain;charset=utf-8");
statisticsYearServer.request(contentStreamUpdateRequest);
}
statisticsYearServer.commit(true, true);
जब मैं इस प्रक्रिया को चलाने का प्रयास किया, मैंने एक त्रुटि संदेश मेरे रिकॉर्ड विशिष्ट आईडी फ़ील्ड अनुपलब्ध और 5 लाख रिकॉर्ड की प्रत्येक प्रक्रिया से गिराया गया के लिए प्राप्त किया।
मैंने प्रत्येक रिकॉर्ड पर एक अद्वितीय आईडी फ़ील्ड के निर्माण को मजबूर करने के लिए इन 5 मिलियन रिकॉर्ड को प्रतिस्थापित करने का प्रयास किया है। यहां वह कोड है जिसे मैं उस अद्यतन को ट्रिगर करने के लिए चला रहा हूं। क्वेरी MyQuery कई हज़ार रिकॉर्ड के बैचों पर पुनरावृत्त करता है।
मेरी रिकॉर्ड की मरम्मत की प्रक्रिया:
ArrayList<SolrInputDocument> idocs = new ArrayList<SolrInputDocument>();
SolrQuery sq = new SolrQuery();
sq.setQuery(myQuery);
sq.setRows(MAX);
sq.setSort("time", ORDER.asc);
QueryResponse resp = server.query(sq);
SolrDocumentList list = resp.getResults();
if (list.size() > 0) {
for(int i=0; i<list.size(); i++) {
SolrDocument doc = list.get(i);
SolrInputDocument idoc = ClientUtils.toSolrInputDocument(doc);
idocs.add(idoc);
}
}
server.add(idocs);
server.commit(true, true);
server.deleteByQuery(myQuery);
server.commit(true, true);
इस प्रक्रिया को चलाने के बाद, भंडार में रिकॉर्ड के सभी में एक विशिष्ट आईडी सौंपा है। मेरे द्वारा छुपाए गए रिकॉर्ड में _version_ फ़ील्ड मौजूद है।
जब मैं ऊपर शामिल शेरिंग प्रक्रिया को फिर से चलाने का प्रयास करता हूं, तो मुझे _version_ फ़ील्ड मान से संबंधित एक त्रुटि प्राप्त होती है और प्रक्रिया समाप्त हो जाती है। यदि मैं संस्करण फ़ील्ड को स्पष्ट रूप से सेट करने का प्रयास करता हूं, तो मुझे वही त्रुटि मिलती है।
Exception: version conflict for e8b7ba64-8c1e-4963-8bcb-f36b33216d69 expected=1484794833191043072 actual=-1
org.apache.solr.client.solrj.impl.HttpSolrServer$RemoteSolrException: version conflict for e8b7ba64-8c1e-4963-8bcb-f36b33216d69 expected=1484794833191043072 actual=-1
at org.apache.solr.client.solrj.impl.HttpSolrServer.request(HttpSolrServer.java:424)
at org.apache.solr.client.solrj.impl.HttpSolrServer.request(HttpSolrServer.java:180)
मेरा लक्ष्य इतना है कि मैं Dspace द्वारा प्रदान की ठीकरा प्रक्रिया चला सकते हैं मेरे रिकॉर्ड की मरम्मत के लिए है: जब मैं ठीकरा प्रक्रिया आह्वान
यहाँ है कि मैं का सामना कर रहा हूँ त्रुटि संदेश है। क्या आप इन रिकॉर्ड्स की मरम्मत के लिए मुझे जो अतिरिक्त कार्रवाई करना चाहिए, उसकी सिफारिश कर सकते हैं?
नहीं एक पूरा जवाब लेकिन शायद यह मदद कर सकते हैं: uid क्षेत्र, Dspace 3 के भाग के रूप में जोड़ा गया एक साथ के इतिहास सीएफआर खोज और कार्यप्रवाह आँकड़े की शुरूआत के साथ: https://github.com/DSpace/DSpace /blob/master/dspace/solr/statistics/conf/schema.xml#L308 तो मुझे लगता है कि 1.8-> 3.0 अपग्रेडिंग में कुछ प्रक्रियाओं को यूआईडी का ख्याल रखना चाहिए। solrconfig.xml को देखते हुए, यूआईडी एक अपडेटप्रोसेसर श्रृंखला का हिस्सा प्रतीत होता है: https://github.com/DSpace/DSpace/blob/master/dspace/solr/statistics/conf/solrconfig।एक्सएमएल # एल 1828 लेकिन मुझे पुराने आंकड़ों के लिए यूआईडी उत्पन्न होने के बारे में कोई विशिष्ट जानकारी नहीं मिली। –
इस चर्चा की निरंतरता के लिए https://jira.duraspace.org/browse/DS-2212 देखें। – terrywb