2009-12-16 12 views
9

हम पूर्ण पाठ खोज के लिए ctxsys.context अनुक्रमणिका प्रकार का उपयोग करना चाहते हैं। लेकिन मैं काफी हैरान था कि इस प्रकार की एक अनुक्रमणिका स्वचालित रूप से अपडेट नहीं होती है। हमारे पास प्रति दिन लगभग 10k अपडेट/आवेषण/हटाए गए 3 मिलियन दस्तावेज़ हैं।ओरेकल टेक्स्ट इंडेक्स को सिंक और अनुकूलित कैसे करें?

ओरेकल टेक्स्ट इंडेक्स को सिंक करने और अनुकूलित करने के लिए आपकी क्या सिफारिशें हैं?

+0

आपके पास क्या संकेत हैं कि सूचकांक सिंक में नहीं रह रहा है? – dpbradley

+0

इस तरह के औजारों के लिए यह आपकी सामान्य आवश्यकताओं के बारे में धारणा नहीं है। बड़ी मात्रा में असंगठित डेटा पर सूचकांक बनाना और बनाए रखना आम तौर पर कुछ विचारों की आवश्यकता होती है ताकि आपके डिज़ाइन विकल्प स्वीकार्य ट्रेडऑफ के साथ समाधान उत्पन्न कर सकें। एक खोज इंजन के लिए अद्यतन और रखरखाव रणनीतियों को एक सहयोगी संलेखन समाधान से बहुत अलग होगा, जो एनालिटिक्स का समर्थन करने वाले एपर्ट फॉर्म को खराब करता है। ओरेकल आपको चुनने के लिए सिंक विकल्पों की एक छोटी सी श्रृंखला देता है, और केवल 10k दैनिक डीएमएल के साथ आप उनमें से किसी के साथ दूर हो सकते हैं। – Roy

उत्तर

3

मुझे लगता है कि 'SYNC EVERY' विकल्प, जैसा कि पिछले उत्तर में वर्णित है, केवल ओरेकल 10 जी या नए में उपलब्ध है। यदि आप ओरेकल के पुराने संस्करण का उपयोग कर रहे हैं तो आपको समय-समय पर सिंक ऑपरेशन करना होगा। उदाहरण के लिए, आप निम्न संग्रहीत प्रक्रिया बना सकते हैं:

CREATE OR REPLACE 
Procedure sync_ctx_indexes 
IS 
CURSOR sql1 is select distinct(pnd_index_owner||'.'||pnd_index_name) as index_name from ctx_pending; 
BEGIN 
FOR rec1 IN sql1 LOOP 
ctx_ddl.sync_index(rec1.index_name); 
END LOOP; 
END; 

और फिर इसे DBMS_JOB के माध्यम से चलाने के लिए शेड्यूल:

DBMS_JOB.SUBMIT(job_id, 'sync_ctx_indexes;', SYSDATE, 'SYSDATE + 1/720'); 

सूचकांक अनुकूलन के लिए के रूप में, निम्न आदेश इस्तेमाल किया जा सकता है (यह भी DBMS_JOB या के साथ निर्धारित किया जा सकता क्रॉन के माध्यम से):

alter index my_index rebuild online parameters('optimize full maxtime 60'); 

इसी तरह के फ़ंक्शन के साथ CTX_ * पैकेज भी उपलब्ध है।

+0

, ओरेकल सूचकांक के साथ पाठ सूचकांक पुनर्निर्माण की अनुशंसा नहीं करता है बल्कि इसके बजाय ctxsys.ctx_ddl.optimize_index का उपयोग करें – Roy

16

"स्वचालित रूप से अपडेट नहीं" से आपका क्या मतलब है?

सूचकांक को प्रतिबद्ध या समय-समय पर सिंक्रनाइज़ किया जा सकता है।

Create index ... on ... INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS ('SYNC (ON COMMIT)') 
Create index ... on ... INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS 'SYNC (EVERY "SYSDATE+1/24")') 

मैं तुम्हें वास्तविक समय खोज सटीकता हमारे डीबीए सूचकांक समय-समय पर सिंक करने के लिए सिफारिश की जरूरत नहीं है, प्रत्येक 2 मिनट का कहना है। यदि आप रात भर ऐसा करने के लिए सक्षम हो सकते हैं, तो बेहतर भी। सबसे अच्छा क्या है आपके लोड और दस्तावेज़ के आकार पर निर्भर करता है।

ये लिंक शायद और अधिक जानकारी प्रदान कर सकते हैं:

डीबीए सलाह के लिए, हो सकता है serverfault बेहतर है?

+0

"प्रतिबद्ध पर" की अनुशंसा नहीं की जाती है। क्या सूचकांक निर्माण पर आवधिक सूचकांक अनुकूलन निर्दिष्ट करना भी संभव है? – trunkc

+6

ध्यान में रखने के लिए बस एक नोट: यदि आप MULTI_COLUMN_DATASTORE के साथ SYNC (ON COMMIT) का उपयोग कर रहे हैं तो इंडेक्स सिंक केवल तभी ट्रिगर किया जाएगा जब वास्तविक अनुक्रमणिका वाला कॉलम प्रभावित होता है। उदाहरण के लिए यदि आपके पास कॉल ए, बी और सी पर ए पर रहने वाले इंडेक्स के साथ बहु-कॉलम इंडेक्स है, तो कॉलम बी का एक अपडेट इंडेक्स सिंक ट्रिगर नहीं करेगा। 1112 और ऊपर के लिए – BernardMarx

1

इसे ओरेकल 12 सी उपयोगकर्ताओं के लिए एक अद्यतन के रूप में यहां डाल देना। यदि आप वास्तविक समय मोड में इंडेक्स का उपयोग करते हैं, तो यह आइटम को स्मृति में रखता है, और आवधिक रूप से मुख्य सारणी पर जाता है, जो विखंडन को नीचे रखता है और स्ट्रीमिंग सामग्री पर एनआरटी खोज को सक्षम बनाता है। यहाँ यह कैसे सेट अप

exec ctx_ddl.drop_preference ('your_tablespace'); 
exec ctx_ddl.create_preference('your_tablespace', 'BASIC_STORAGE'); 
exec ctx_ddl.set_attribute ('your_tablespace', 'STAGE_ITAB', 'true'); 
create index some_text_idx on your_table(text_col) indextype is ctxsys.context PARAMETERS ('storage your_tablespace sync (on commit)') 

इस NRT मोड में सूचकांक की स्थापना करेगा। यह बहुत प्यारा है।

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