Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

वाइल्डकार्ड के साथ क्वेरी और Oracle टेक्स्ट इंडेक्स के साथ डेटा का मिलान नहीं करना

ऐसा इसलिए है क्योंकि आपका डिफ़ॉल्ट लेक्सर अवधि को शब्द विभाजक के रूप में मान रहा है।

प्रारंभिक सेटअप:

create table my_table(item_number varchar2(50 byte) not null);

insert into my_table values ('1234.1234');

create index my_index on my_table (item_number) 
indextype is ctxsys.context;

यह आपके द्वारा देखे जाने वाले व्यवहार को प्राप्त करता है:

SELECT * FROM MY_TABLE
WHERE CONTAINS(ITEM_NUMBER, '%1234') > 0;

--------------------------------------------------
1234.1234

SELECT * FROM MY_TABLE
WHERE CONTAINS(ITEM_NUMBER, '%.1234') > 0;

no rows selected

अगर आप कोई ऐसा लेक्सर जोड़ते हैं जो PRINTJOINS अवधि शामिल करने के लिए:

drop index my_index;

begin 
  ctx_ddl.create_preference('my_lexer', 'BASIC_LEXER'); 
  ctx_ddl.set_attribute('my_lexer', 'PRINTJOINS', '.');
end;
/

create index my_index on my_table (item_number) 
indextype is ctxsys.context
parameters ('lexer my_lexer');

तो यह आपके इच्छित व्यवहार करता है:

SELECT * FROM MY_TABLE
WHERE CONTAINS(ITEM_NUMBER, '%.1234') > 0;

ITEM_NUMBER
--------------------------------------------------
1234.1234

टेक्स्ट इंडेक्सिंग तत्वों के बारे में और पढ़ें



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ग्रांट क्रिएट सेशन विशेषाधिकार कैसे प्रदान करें?

  2. Oracle तालिका AS और तालिका टिप्पणियाँ और स्तंभ टिप्पणियाँ बनाएँ

  3. Oracle 11.1 बग जूलियन दिन संख्या को DATE या TIMESTAMP में परिवर्तित कर रहा है

  4. किसी फ़ाइल में DBMS_OUTPUT.PUT_LINE के आउटपुट को पुनर्निर्देशित कैसे करें?

  5. सबसे हाल के रिकॉर्ड को छोड़कर सभी रिकॉर्ड हटाएं?