2013-03-13 13 views
5

मेरे पास मेरी तालिका में एक कॉलम है जो संदर्भित है।ओरेकल कंटेनर काम नहीं कर रहा है

CREATE INDEX CIDX_MUSTFIXBY ON TABLE 
    (MUST_FIX_BY) 
INDEXTYPE IS CTXSYS.CONTEXT 
NOPARALLEL; 

और मुझे जहां हालत

और must_fix_by की तरह 'Q2%'

साथ एक प्रश्न कोशिश कर रहा हूँ और यह पंक्तियाँ देता है।

हालांकि जब मैं जहां हालत

और (must_fix_by, 'Q2')> 0

शामिल साथ क्वेरी कोशिश करते हैं और यह किसी भी पंक्तियों को वापस नहीं करता है।

क्या कोई मुझे बता सकता है कि क्यों काम कर रहा है और इसमें शामिल नहीं है?

+0

आप दूसरी क्वेरी के साथ क्या हासिल करने की कोशिश कर रहे हैं? क्या आप एक गिनती चाहते हैं (इसमें शामिल होना चाहिए (must_fix_by, 'Q2'))> 0 यह पता लगाने के लिए कि उस स्ट्रिंग में कितने रिकॉर्ड हैं? – thursdaysgeek

+0

मैं चाहता हूं कि क्वेरी उन सभी पंक्तियों को वापस कर दे जो Q2 में must_fix_by है। मुझे पता है कि मैं पसंद के साथ जा सकता हूं लेकिन मैं जानना चाहता हूं कि क्यों काम नहीं करता है। – Jeevan

+0

ओह, क्षमा करें, मैंने गलत सवाल पढ़ा है। – thursdaysgeek

उत्तर

5

दो संभावित कारण - सूचकांक सिंक्रनाइज़ नहीं किया जा सकता है, और CONTAINSLIKE मिलान तारों के साथ शब्दों से मेल खाता है।

दो तार, जहां LIKE मैचों दोनों है, लेकिन CONTAINS मैचों न का एक उदाहरण:

create table test1(must_fix_by varchar2(4000)); 
create index cidx_mustfixby on test1(must_fix_by) indextype is ctxsys.context; 
insert into test1 values('Q234567'); 
insert into test1 values('Q2 234567'); 
select * from test1 where must_fix_by like 'Q2%'; 

MUST_FIX_BY 
----------- 
Q234567 
Q2 234567 

select * from test1 where contains(must_fix_by, 'Q2') > 0; 

no rows selected 

डिफ़ॉल्ट रूप से, CONTEXT अनुक्रमित manually synchronized की जरूरत है। आपको या तो चलाने की आवश्यकता है: exec ctx_ddl.sync_index('cidx_mustfixby');, या आपको on commit के साथ आपको इंडेक्स बनाने की आवश्यकता है।

exec ctx_ddl.sync_index('cidx_mustfixby'); 
select * from test1 where contains(must_fix_by, 'Q2') > 0; 

MUST_FIX_BY 
----------- 
Q2 234567 

यह किसी एक समस्या को हल करता है। लेकिन Q234567 अभी भी मेल नहीं खाता है। मुझे ओरेकल टेक्स्ट के बारे में बहुत कुछ पता नहीं है, और मुझे CONTAINS कामों का एक सरल विवरण भी नहीं मिला है। लेकिन ऐसा लगता है कि तारों के बजाय पूर्ण शब्दों पर आधारित है। क्यू 2 और अन्य पात्रों के बीच एक सरल CONTAINS फ़िल्टर द्वारा उठाए जाने के लिए कुछ प्रकार की शब्द सीमा होने की आवश्यकता है।

+0

धन्यवाद जोनियरल्स – Jeevan

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