sql >> Database >  >> RDS >> Oracle

Query met jokerteken en punt die niet overeenkomen met gegevens met Oracle Text-index

Dit komt omdat je standaard lexer de punt behandelt als een woordscheidingsteken.

Initiële installatie:

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;

Dit krijgt het gedrag dat u ziet:

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

Als u een lexer toevoegt die PRINTJOINS om de periode op te nemen:

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

dan gedraagt ​​het zich zoals je wilt:

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

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

Lees meer over tekstindexeringselementen .



  1. MigrationSchemaMissing(Kan de django_migrations-tabel (%s) % exc niet maken)

  2. Kolom hier niet toegestaan ​​Oracle SQL op meerdere kolommen

  3. Verzoek ingesteld in Concurrent Manager

  4. SQLAlchemy SELECT WITH-clausule/instructie (pgsql)