2012-08-03 27 views
10

क्या मौजूदा दस्तावेज़ में कोई नया फ़ील्ड अपडेट करने की संभावना है? उदाहरण के लिए: कई फ़ील्ड वाले दस्तावेज़ हैं, उदा।मौजूदा दस्तावेज़ में एक नया फ़ील्ड अपडेट करें

ID=99999 
Field3:text 

अभी के लिए, पुराने दस्तावेज़ को हटा दिया जाएगा और एक नया:

ID=99999 
Field1:text 
Field2:text 

इस दस्तावेज़ अनुक्रमणिका में हो, अब मैं पुराने डेटा के बिना इस दस्तावेज़ के एक नए क्षेत्र सम्मिलित करना चाहते हैं आईडी के साथ दस्तावेज़ बनाया जाएगा। तो अगर मैं अब आईडी 99999 के लिए खोज परिणाम होंगे:

ID=99999 
Field3:text 

मैं Solr विकी

पर पढ़े मैं किसी मौजूदा दस्तावेज़ के किसी विशिष्ट क्षेत्र अद्यतन कर सकते हैं कैसे?

मैं किसी दस्तावेज़ में एक विशिष्ट फ़ील्ड अपडेट करना चाहता हूं, क्या यह संभव है? मुझे केवल एक विशिष्ट दस्तावेज़ के लिए एक फ़ील्ड को अनुक्रमणित करने की आवश्यकता है। क्या मुझे इसके लिए सभी दस्तावेज इंडेक्स करना है?

नहीं, केवल एक दस्तावेज़। मान लें कि आपके पास एक सीएमएस है और आप एक दस्तावेज़ संपादित करते हैं। आपको पूरे दस्तावेज़ के लिए केवल सोलर कथन का उपयोग करके इस दस्तावेज़ को फिर से अनुक्रमणित करने की आवश्यकता होगी (केवल एक फ़ील्ड नहीं)।

एक दस्तावेज़ को अद्यतन करने के लिए ल्यूसीन में ऑपरेशन वास्तव में एक जोड़ के बाद एक हटा है। आपको पूर्ण दस्तावेज़ जोड़ने की आवश्यकता होगी क्योंकि लुसीन में ऐसा कोई "अपडेट केवल एक फ़ील्ड" अर्थशास्त्र नहीं है।

तो क्या इसके लिए कोई समाधान है? क्या यह कार्य एक और संस्करण में लागू किया जाएगा (मैं वर्तमान में 3.6.0 का उपयोग करता हूं)। एक कामकाज के रूप में, मैंने एक स्क्रिप्ट या एप्लिकेशन लिखने के बारे में सोचा, जो मौजूदा फ़ील्ड एकत्र करेगा, नया फ़ील्ड जोड़ देगा और पूरे दस्तावेज़ को अपडेट करेगा। लेकिन मुझे लगता है कि यह प्रदर्शन भुगतना होगा। क्या तुम्हारे पास कोई और योजनायें हैं?

सादर

उत्तर

10

मेरे पास है के लिए आप 2 जवाब (दोनों कम या ज्यादा बुरा):

  1. (दस्तावेज़ आईडी भीतर फ़ील्ड 3 अद्यतन करने के लिए अद्यतन दस्तावेज़ के भीतर दाखिल Solr में आप पूरे दस्तावेज़ पुन: अनुक्रमणिका करने के लिए : 99 999 आपको उस दस्तावेज़ को सभी क्षेत्रों के मूल्यों के साथ पुन: प्रस्तुत करना होगा)
  2. सोलर 4 में उन्होंने इस तरह की सुविधा लागू की, लेकिन उनके पास एक शर्त है: सभी फ़ील्ड को केवल अनुक्रमित नहीं किया जाना चाहिए। क्या हो रहा है कि वे पृष्ठभूमि में संग्रहित मानों और पुनर्विक्रेता दस्तावेज़ का उपयोग कर रहे हैं। यदि आप रुचि रखते हैं, तो इसके बारे में अच्छा लेख है: http://solr.pl/en/2012/07/09/solr-4-0-partial-documents-update/ इस समाधान में स्पष्ट दोष है और यह सभी फ़ील्ड संग्रहीत करते समय सूचकांक का आकार है।

मुझे आशा है कि इससे आपको आपकी समस्या में मदद मिलेगी। यदि आपके कुछ और प्रश्न हैं, तो कृपया

+0

धन्यवाद एक बहुत परिणाम होगा! आपका पहला जवाब सिर्फ यही है जो मैंने सोचा था। क्या आपको लगता है कि यह अत्यधिक प्रदर्शन का सामना करेगा? उत्तर 2 के लिए: क्या आप मुझे इस चेंजलॉग के साथ आधिकारिक लिंक दे सकते हैं? मैं इस सुविधा को खोजने में सक्षम नहीं था। अच्छा लिंक :-) –

+0

निर्भर करता है कि आप कितनी बार परिवर्तन कर रहे हैं, आपकी अनुक्रमणिका कितनी बड़ी है, दस्तावेज़ कितने बड़े हैं, आप किस हार्डवेयर का उपयोग कर रहे हैं। किसी भी बदलाव के रूप में यह आईओ, सीपीयू इत्यादि खर्च करता है, आपको अपने मामले में कितना प्रयोग करना होगा। दूसरे भाग के लिए मैं इसे लॉग में नहीं ढूंढ सकता: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/CHANGES.txt?view=markup हालांकि योनिक सीली यह पुष्टि कर रहा है कि http: // grokbase.com/t/lucene/solr-user/127bc3svh7/updating- दस्तावेज़ – Fuxi

+0

मेरी अनुक्रमणिका में लगभग 1,8 मिलियन दस्तावेज़ हैं, प्रत्येक दस्तावेज़ में लगभग 10-30 बहुमुखी फ़ील्ड हैं। समस्या यह है कि आवेदन के विकास में बहुत अधिक समय लगेगा, अगर मैं इसे उच्च प्रदर्शन हानि के कारण उपयोग नहीं कर सकता। क्या संस्करण को 4.0 अल्फा संस्करण में बदलने की अनुशंसा की जाती है? क्या आपको कोई अनुभव है? बहुत बहुत धन्यवाद :-) –

6

पूछें सोलर 4 में ऐसा करना संभव है।निम्नलिखित दस्तावेज़

{ 
"id": "book123", 
"name" : "Solr Rocks" 
} 

दस्तावेज़ में एक लेखक क्षेत्र को जोड़ने के लिए फ़ील्ड मान "सेट" विशेषता और फ़ील्ड मान के साथ एक json वस्तु होगा आदेश में विचार करें

$ curl http://localhost:8983/solr/update -H 'Content-type:application/json' -d ' 
[ 
{"id"  : "book123", 
    "author" : {"set":"The Community"} 
} 
]' 

आपका नया दस्तावेज़

$ curl http://localhost:8983/solr/get?id=book123 

हो जाएगा

{ 
"doc" : { 
    "id" : "book123", 
    "name" : "Solr Rocks" 
    "author": "The Community" 
} 
} 

सेट लेखक फ़ील्ड को जोड़ या बदल देगा। सेट के साथ-साथ आपके पास वृद्धि (इंक) और जोड़ने (जोड़ने) का विकल्प भी है (0)

+0

मैं आईडी फ़ील्ड का उपयोग न करने वाले लेखक फ़ील्ड पर दस्तावेज़ को अपडेट करना चाहता हूं। मैं उसे कैसे कर सकता हूँ? – iNikkz

0

सोलर 4 से आप सोलर में एक फ़ील्ड अपडेट कर सकते हैं .... पूरे इंडेक्स को पुन: स्थापित करने की कोई ज़रूरत नहीं है .... विभिन्न संशोधक जैसे समर्थित हैं ....

किसी विशेष मान को सेट या सेट करें, या मान को हटाएं यदि शून्य को नए मान जोड़ के रूप में निर्दिष्ट किया गया है - एक सूची में अतिरिक्त मान जोड़ता है हटाएं - एक मान हटा देता है (या मूल्यों की एक सूची) removeregex - दी गई जावा नियमित अभिव्यक्ति inc से मेल खाने वाली सूची से हटाती है - एक विशिष्ट राशि से एक संख्यात्मक मान बढ़ाती है (कमी के लिए नकारात्मक मान का उपयोग करें)

उदाहरण:

दस्तावेज़

{ 
"id": "1", 
"name" : "Solr" 
"views" : "2" 
} 

अब

$ curl http://localhost:8983/solr/demo/update -d ' 
[ 
{"id"   : "1", 
    "author" : {"set":"Neal Stephenson"}, 
    "views" : {"inc":3}, 
    } 
]' 

साथ अद्यतन में

{ 
"id": "1", 
"name" : "Solr" 
"views" : "5" 
"author" : "Neal Stephenson" 
} 
संबंधित मुद्दे

 संबंधित मुद्दे