Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Kueri dengan wildcard dan titik tidak cocok dengan data dengan indeks Oracle Text

Ini karena lexer default Anda memperlakukan titik sebagai pemisah kata.

Penyiapan awal:

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;

Ini mendapatkan perilaku yang Anda lihat:

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

Jika Anda menambahkan lexer yang mendefinisikan PRINTJOINS untuk menyertakan periode:

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');

kemudian berperilaku seperti yang Anda inginkan:

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

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

Baca selengkapnya tentang elemen pengindeksan teks .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. batas waktu koneksi database jboss saat idle di oracle

  2. Apa Presisi dan Skala default untuk Angka di Oracle?

  3. Perhitungan stempel waktu dengan waktu musim panas

  4. EF 4, cara menambahkan kelas parsial

  5. Format string URL untuk menghubungkan ke database Oracle dengan JDBC