2013-06-15 6 views
6

मैं टाइटन सर्वर (कैसंद्रा) बनाम 0.3.1 का उपयोग कर रहा हूं। मैं एक वर्टेक्स कुंजी/प्रॉपर्टी पर एक इंडेक्स बनाना चाहता हूं जिसे मैंने पहले ही उपयोग करना शुरू कर दिया है। हालांकि, उनके documentation में, टाइटन बताते हैं कि:एक कशेरुक संपत्ति पर एक अनुक्रमणिका बनाएँ जो पहले से ही टाइटन (कैसंद्रा) में मौजूद है?

To index vertices by key, the respective key index must be created before the key is first used in a vertex property.

अगर मैं एक क्षेत्र पहले से मौजूद है पर एक सूचकांक बनाने का प्रयास करें, मैं एक त्रुटि दिखाई अपेक्षा के अनुरूप:

gremlin> g.createKeyIndex("my_key",Vertex.class) 
Cannot add an index to an already existing property key: my_key 

हालांकि, यहां तक ​​कि अगर मैं

gremlin> g.E.remove() 
==>null 
gremlin> g.V.remove() 
==>null 
gremlin> g.createKeyIndex("my_key",Vertex.class) 
Cannot add an index to an already existing property key: my_key 

तो ऐसा लगता है कि my_key टी में बनी रहती है: सब कोने & किनारों को हटाने के द्वारा ग्राफ बाहर खाली करने के लिए प्रयास करते हैं, मैं एक ही त्रुटि दिखाई देती है सभी ग्राफ तत्वों को हटा दिए जाने के बाद भी वह डेटा स्टोर अंतर्निहित है। यह दस्तावेज़ों के अनुरूप है (भले ही तत्व हटा दिए गए हैं, संपत्ति पहले से ही 'पहले इस्तेमाल की जा चुकी है'), लेकिन एक शॉट के लायक लग रहा था।

मेरा अगला कदम एक नया कैसंड्रा डेटा स्टोर फिर से बनाने के लिए होगा, लेकिन मुझे आश्चर्य है कि कोई बेहतर विकल्प है या नहीं।

टाइटन में पहले से उपयोग किए जा रहे क्षेत्र पर एक इंडेक्स बनाने का सबसे आसान तरीका क्या है?

उत्तर

3

प्वाइंट टाइटन एक नए कैसंड्रा डेटा स्टोर में और उस संपत्ति के साथ किसी भी तत्व को सम्मिलित करने से पहले इंडेक्स बनाएं।

gremlin> g.V.each{g.removeVertex(it)} 

आप मैन्युअल रूप से किनारों को दूर करने के क्योंकि अगर एक शीर्ष निकाल दिया जाता है, इससे संबद्ध सभी किनारों स्वचालित रूप से हटा दिया जाएगा की जरूरत नहीं है:

gremlin> g.createKeyIndex("my_key",Vertex.class) 
==>null 
3

इस दुष्टात्मा क्वेरी आज़माएं। और उन सभी शीर्षकों को निकालने के लिए जिन्हें आपको एक इटरेटिव क्वेरी का उपयोग करने की आवश्यकता है।

ग्राफ साफ़ होने के बाद, आपको एक नई कीस्पेस की आवश्यकता नहीं होगी। इसके बाद आप इसका उपयोग कर सकते हैं:

gremlin> g.createKeyIndex("my_key",Vertex.class) 
+0

आपके उत्तर के लिए धन्यवाद - दुर्भाग्यवश, ऐसा लगता है कि यह इस अंत में नहीं है। मुझे लगता है कि 'g.V.each {g.removeVertex (it)} 'लगभग' g.V.remove() '([संबंधित देखें] (http://stackoverflow.com/a/17250723/2172530) के बराबर है। जब मैंने शिखर हटाने के लिए आपकी वैकल्पिक विधि की कोशिश की, तो टाइटन की एक ही शिकायत थी: 'पहले से मौजूद किसी मौजूदा प्रॉपर्टी कुंजी में कोई अनुक्रमणिका नहीं जोड़ सकता: my_key'। – bcm360

+0

क्या आपने हटाने के बाद लेनदेन किया था? – Pradatta

+0

मैंने किया, कोई फर्क नहीं पड़ता: 'gremlin> g.V.each {g.removeVertex (it)}; g.commit(); g.createKeyIndex ("my_key", Vertex.class); पहले से मौजूद किसी मौजूदा प्रॉपर्टी कुंजी में कोई अनुक्रमणिका नहीं जोड़ सकता: my_key' – bcm360

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