Oracle
 sql >> база данни >  >> RDS >> Oracle

Заявка със заместващ знак и точка не съответства на данни с индекс на Oracle Text

Това е така, защото лексърът ви по подразбиране третира точката като разделител на думи.

Първоначална настройка:

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. Как да промените настройките за SQL Developer, за да разпознае правилно текущата версия на SDK

  3. Не мога да свържа моя екземпляр на RDS Oracle към PHP сървър

  4. Oracle SQL INNER Присъединяване въз основа на несъвпадащи стойности

  5. ORA-65139:Несъответствие между XML файл с метаданни и файл с данни