2015-12-13 6 views
5

मुझे सोलर 5.3.1 के साथ कोई समस्या है। मेरी स्कीमा अपेक्षाकृत सरल है। मेरे पास एक अद्वितीय है जो स्ट्रिंग के रूप में "आईडी" है। अनुक्रमित, संग्रहीत और आवश्यक, गैर-बहुगुणित।सोलर ओवरराइट नहीं करता है - डुप्लीकेट अनन्यकी प्रविष्टियां

मैं पहले "content_type: document_unfinished" के साथ दस्तावेज़ जोड़ता हूं और फिर उसी आईडी के साथ उसी दस्तावेज़ के साथ ओवरराइट करता है लेकिन अन्य सामग्री_ प्रकार: दस्तावेज़। दस्तावेज सूचकांक में दो बार है। फिर, स्ट्रिंग के रूप में, एकमात्र अद्वितीयकि "आईडी" है। आईडी मूल रूप से एक mysql-index प्राथमिक int से आ रही है।

भी लगता है कि यह न केवल एक बार होता है:

http://lucene.472066.n3.nabble.com/uniqueKey-not-enforced-td4015086.html

http://lucene.472066.n3.nabble.com/Duplicate-Unique-Key-td4129651.html

मेरे मामले में नहीं सूचकांक में सभी दस्तावेजों को दोहराया गया है, बस कुछ। मैं मान रहा था - शुरुआत में - जब वे सूचकांक में एक ही अद्वितीय कुंजी मौजूद होते हैं तो वे प्रतिबद्धता पर ओवरराइट हो रहे हैं। जो मुझे लगता है कि काम करने की प्रतीत नहीं होती है। मैं दस्तावेज़ में कुछ फ़ील्ड बस अपडेट नहीं करना चाहता, मैं इसे सभी बच्चों के साथ पूरी तरह से बदलना चाहता हूं।

कुछ आंकड़े: सूचकांक में लगभग 350k दस्तावेज़। ज्यादातर बच्चे दस्तावेज़ों के साथ। दस्तावेजों को "content_type" फ़ील्ड द्वारा प्रतिष्ठित किया जाता है। मैंने उन्हें इस तरह आयात करने के लिए सोलरजे का उपयोग किया:

HttpSolrServer server = new HttpSolrServer(url); 
server.add(a Collection<SolrInputDocument>); 
server.commit(); 

मैं हमेशा सभी बच्चों के साथ एक संपूर्ण दस्तावेज़ जोड़ रहा हूं। इसका कुछ भी फैंसी नहीं है। मैं एक ही अद्वितीय के लिए डुप्लिकेट दस्तावेज़ों के साथ समाप्त होता हूं। कोई पक्ष इंजेक्शन नहीं हैं। मैं एकीकृत जेटी के साथ केवल सोलर चलाता हूं। मैं जावा में "मैन्युअल रूप से" ल्यूसीन इंडेक्स नहीं खोलता हूं।

मैंने फिर से + डालने के लिए क्या किया था। यही कारण है कि कुछ समय के लिए काम करने के लिए लग रहा था, लेकिन फिर शुरू कर दिया के तहत कुछ शर्तों यह त्रुटि संदेश दे:

जनक क्वेरी पैदावार दस्तावेज है जो माता-पिता से मेल नहीं खाता फ़िल्टर कर

दस्तावेज़ जहां ऐसा होता है प्रतीत हो रहा है पूरी तरह से यादृच्छिक, केवल एक चीज उभरती प्रतीत होती है: यह एक बच्चा दस्तावेज़ जहां होता है। मैं कुछ विशेष नहीं चलाता, मूल रूप से वेबसाइट से सोलर पैकेज डाउनलोड करता हूं और इसे bin/solr start

कोई भी विचार किसी भी विचार से चलाता है?

संपादित करें 1

मैं मैं इस समस्या है, जो एक बग हो रहा है पाया लगता है? इस मुद्दे को पुन: उत्पन्न करने के लिए:

मैंने वर्चुअलबॉक्स में एक डेबियन में सोलर 5.3.1 डाउनलोड किया और इसे bin/solr start से शुरू किया। मूल विन्यास सेट के साथ एक नया कोर जोड़ा गया। मूल कॉन्फ़िगरेशन सेट पर कुछ भी नहीं बदला, बस इसे कॉपी किया और कोर जोड़ा।

इस सूचकांक में एक ही आईडी वाले दो दस्तावेज़ों की ओर जाता है:

SolrClient solrClient = new HttpSolrClient("http://192.168.56.102:8983/solr/test1"); 
    SolrInputDocument inputDocument = new SolrInputDocument(); 
    inputDocument.setField("id", "1"); 
    inputDocument.setField("content_type_s", "doc_unfinished"); 
    solrClient.add(inputDocument); 
    solrClient.commit(); 
    solrClient.close(); 

    solrClient = new HttpSolrClient("http://192.168.56.102:8983/solr/test1"); 
    inputDocument = new SolrInputDocument(); 
    inputDocument.setField("id", "1"); 
    inputDocument.setField("content_type_s", "doc"); 
    SolrInputDocument childDocument = new SolrInputDocument(); 
    childDocument.setField("id","1-1"); 
    childDocument.setField("content_type_s", "subdoc"); 
    inputDocument.addChildDocument(childDocument); 
    solrClient.add(inputDocument); 
    solrClient.commit(); 
    solrClient.close(); 

साथ सर्च कर रहे हैं:

http://192.168.56.102:8983/solr/test1/select?q=% 3 ए & wt = json & मांगपत्र = सच

की ओर जाता है निम्नलिखित आउटपुट:

{ 

    "responseHeader": { 
    "status": 0, 
    "QTime": 0, 
    "params": { 
     "q": "*:*", 
     "indent": "true", 
     "wt": "json", 
     "_": "1450078098465" 
    } 
    }, 
    "response": { 
    "numFound": 3, 
    "start": 0, 
    "docs": [ 
     { 
     "id": "1", 
     "content_type_s": "doc_unfinished", 
     "_version_": 1520517084715417600 
     }, 
     { 
     "id": "1-1", 
     "content_type_s": "subdoc" 
     }, 
     { 
     "id": "1", 
     "content_type_s": "doc", 
     "_version_": 1520517084838101000 
     } 
    ] 
    } 
} 

मैं क्या गलत कर रहा हूँ?

+0

मैं वर्तमान में एक स्थिति है जिसमें से मिलता-जुलता हो रहा है का सामना करना पड़ रहा हूँ: मैं भी SolrJ उपयोग करते हैं, मैं भी childDocuments, का उपयोग करें और मैं भी अभी हाल ही में पता चला , कि एक दस्तावेज़ के एक सादे अद्यतन पर, af सूचकांक में एक ही अद्वितीय कुंजी के साथ दस्तावेज दो बार मौजूद है। मैंने यह भी सोचा कि मैं solrClient के माध्यम से दस्तावेज़ को स्पष्ट रूप से हटाने की कोशिश कर सकता हूं।deleteById (आईडी), जो समस्या को हल करने के लिए प्रतीत होता है - हालांकि, चूंकि आप कहते हैं कि यह एक वास्तविक फिक्स नहीं है, मैं अभी भी चिंता करता हूं। – SebastianRiemer

+0

मैंने एक छोटा जावा परीक्षण एप्लिकेशन लिखा है जो आपके द्वारा वर्णित समस्या उत्पन्न करता है। यह यहां पाया जा सकता है: https://github.com/sebastianriemer/SolrDuplicateTest मुझे यह जानने में दिलचस्पी होगी कि आपको मेरे जैसा ही परिणाम मिल रहा है या नहीं। मैंने सोलर-यूजर मेलिंग सूची में भी लिखा और जवाब यहां वापस पोस्ट करेंगे। – SebastianRiemer

+0

मुझे लगता है कि मैं कहीं पढ़ रहा था कि सोलर बिना किसी दस्तावेज के दस्तावेजों का इलाज कर रहा है। मुझे याद नहीं है कि मैं इसे कहां पढ़ रहा था, लेकिन मैंने पहले दस्तावेज़ से तुरंत एक उप-दस्तावेज़ जोड़ना शुरू कर दिया। ओवरराइटिंग तब से मेरे लिए काम करता है - लेकिन मैं अभी भी इसे सोलर से "बग" के रूप में मानता हूं जो अनन्य कुंजियों का इलाज नहीं करता ... जैसा कि ... अद्वितीय है। मैं हर दिन सूचकांक में कुछ 10k दस्तावेज़ जोड़ रहा हूं और यह काम करता है। –

उत्तर

3

आपकी प्रतिक्रिया के लिए धन्यवाद! मैं इसे उत्तर के रूप में लिखता हूं क्योंकि यह अन्यथा बहुत लंबा है।

मिखाइल Khludnev नमस्ते सेबस्टियन,

स्टैंडअलोन डॉक्स और ब्लॉक काम नहीं करता मिश्रण: मैं वास्तव में मेलिंग सूची से एक ही प्रतिक्रिया मिली। के बहुत सारे मुद्दे खुले हैं।

बुध, मार्च 9, 2016 पर पर 3:02 प्रधानमंत्री सेबस्टियन रीमर लिखा है:

हाय,

वास्तव में के बजाय सिर्फ परीक्षण को जोड़ने की, संक्षेप में मेरी समस्या का वर्णन करने के applicaton, SolrJ का उपयोग कर मैं निम्नलिखित है:

1) एक अभिभावक के रूप में एक नया दस्तावेज़ बनाएँ और प्रतिबद्ध

SolrInputDocument parentDoc = new SolrInputDocument(); 
    parentDoc.addField("id", "parent_1"); 
    parentDoc.addField("name_s", "Sarah Connor"); 
    parentDoc.addField("blockJoinId", "1"); 
    solrClient.add(parentDoc); 
    solrClient.commit(); 

2) एक बच्चे दस्तावेज़ के साथ 1 में के रूप में ही अद्वितीय आईडी के साथ एक नया दस्तावेज़ बनाएं) Solr सूचकांक में आईडी = "parent_1" के साथ 2 दस्तावेज़ में

SolrInputDocument parentDocUpdateing = new SolrInputDocument(); 
    parentDocUpdateing.addField("id", "parent_1"); 
    parentDocUpdateing.addField("name_s", "Sarah Connor"); 
    parentDocUpdateing.addField("blockJoinId", "1"); 

    SolrInputDocument childDoc = new SolrInputDocument(); 
    childDoc.addField("id", "child_1"); 
    childDoc.addField("name_s", "John Connor"); 
    childDoc.addField("blockJoinId", "1"); 

    parentDocUpdateing.addChildDocument(childDoc); 
    solrClient.add(parentDocUpdateing); 
    solrClient.commit(); 

3) परिणाम संलग्न

क्या यह सामान्य व्यवहार है? मैंने सोचा कि मौजूदा दस्तावेज़ होना चाहिए जो एक ही आईडी के साथ एक नया दस्तावेज़ उत्पन्न करने के बजाय अपडेट किया गया हो।

एक पूर्ण कार्यकारी परीक्षण आवेदन के लिए कृपया मूल संदेश देखें।

सादर, सेबस्टियन

मुझे लगता है कि यह एक ज्ञात समस्या है, और कई टिकट जो एक तरह से इस से संबंधित वहाँ मौजूद हैं, लेकिन मुझे खुशी है कि इससे निपटने के लिए एक तरह से है कि वहाँ हूँ (बच्चे डॉक्स शुरू से ही जोड़ने) (https://issues.apache.org/jira/browse/SOLR-6096, https://issues.apache.org/jira/browse/SOLR-5211, https://issues.apache.org/jira/browse/SOLR-7606)

+0

समस्या को गर्म करने के लिए धन्यवाद। मुझे यकीन नहीं है कि यह वास्तव में एक समाधान है। यह केवल मुझे वास्तव में एक बुरा कामकाज की याद दिलाता है। वैसे भी, मैं स्वीकार करूँगा एक जवाब के रूप में, यहां तक ​​कि कठिन मैं उस व्यवहार से वास्तव में खुश नहीं हूं। एक निराशा की तरह कि इसका हलर दस्तावेज में बोल्ड-लाल अक्षरों में उल्लेख नहीं किया गया है ... –