У меня есть поле в таблице, индексированное по домену, чтобы я мог использовать CONTAINS в запросе.Я пытаюсь создать запрос, который может точно найти аббревиатуру (то есть JAVA).Проблема в том, что период "."это стоп-слово, которое игнорируется.Мне нужно выяснить, как это сделать, избегая "."как-то.Я не могу найти какую-либо ссылку в Интернете о том, как это сделать, или, возможно, я не совсем понимаю, что я читаю.
Я пытался
SELECT * FROM table WHERE CONTAINS(CLOB_column, '{J.A.V.A}')>0;
SELECT * FROM table WHERE CONTAINS(CLOB_column, '{J_A_V_A_}')>0;
SELECT * FROM table WHERE CONTAINS(CLOB_column, '{J\.A\.V\.A\.}')>0;
Я создал индекс домена с помощью: CREATE INDEX table_txt_idx ON таблица (CLOB_column) INDEXTYPE IS CTXSYS.CONTEXT;
Я что-то видел (https://oracle -base.com / article / 9i / full-text-indexing-using-oracle-text-9i ) (https://docs.oracle.com/database/121/CCREF/csql.htm#CCREF0100) о добавлении в индекс, но я не думаю, что этоотносится к индексу ctxsys, но я не совсем уверен. Я просто знаю, что я использовал, не работал.
BEGIN
CTX_DLL.OPTIMIZE_INDEX('IDX_COLUMN_TXT','FAST');
END;
Это не упоминало ctxsys (https://docs.oracle.com/cd/B28359_01/text.111/b28303/ind.htm#BEIIEAFD)
Я создал похожие запросы, используя LIKE и REGEXP_INSTR, и мне нужно создать их, используя CONTAINS, чтобы я мог убедиться, что я запускаю тот, который работает быстрее всего.
SELECT * from table WHERE CLOB_column LIKE '%J.A.V.A.%'; --4.441 seconds
SELECT * from table WHERE REGEXP_INSTR(CLOB_column, '(J\.A\.V\.A\.)')>0; --23.528 seconds