दो संभावित कारण - इंडेक्स को सिंक्रोनाइज़ नहीं किया जा सकता है, और CONTAINS
LIKE
. के दौरान शब्दों से मेल खाता प्रतीत होता है तार से मेल खाता है।
दो स्ट्रिंग्स का एक उदाहरण, जहां 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
इंडेक्स को मैन्युअल रूप से सिंक्रनाइज़
होना चाहिए . आपको या तो चलाने की आवश्यकता है: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
अभी भी मेल नहीं खाता है। मैं Oracle टेक्स्ट के बारे में बहुत कुछ नहीं जानता, और मुझे इसका सरल विवरण भी नहीं मिल रहा है कि कैसे CONTAINS
काम करता है। लेकिन ऐसा लगता है कि यह स्ट्रिंग्स के बजाय पूर्ण शब्दों पर आधारित है। Q2 और अन्य वर्णों के बीच किसी प्रकार की शब्द सीमा होनी चाहिए ताकि इसे एक साधारण CONTAINS
द्वारा उठाया जा सके। फ़िल्टर करें।